Rozważmy następujący TSQL:TSQL - Wstawianie Daty w dynamiczne SQL
SET @WhereClause1 = 'where a.Date > ' + @InvoiceDate
pojawia się błąd konwersji daty/ciąg. @InvoiceDate
to zmienna datetime. Jaka jest prawidłowa składnia?
Rozważmy następujący TSQL:TSQL - Wstawianie Daty w dynamiczne SQL
SET @WhereClause1 = 'where a.Date > ' + @InvoiceDate
pojawia się błąd konwersji daty/ciąg. @InvoiceDate
to zmienna datetime. Jaka jest prawidłowa składnia?
To może działać.
SET @WhereClause1 = 'where a.Date > ''' + convert(varchar, @InvoiceDate) + ''''
mimo że błąd zostanie zgłoszony, jeśli wartość jest zerowa.
Ponieważ twoje zapytanie składające się najpierw jako ciąg znaków, to myślę, że musisz przekonwertować @InvoiceDate na ciąg znaków z czymś takim jak this. http://www.databasejournal.com/features/mssql/article.php/10894_2197931_1/Working-with-SQL-Server-DateTime-Variables-Part-Two---Displaying-Dates-and-Times-in-Different-Formats.htm
... prawdopodobnie będziesz musiał dołączyć ciągi znaków w cudzysłowach.
Prawdopodobnie lepiej byłoby skonstruować ciąg daty w procedurze wywołującej, ponieważ należy tam sprawdzać wartości puste i możliwe inne sprawdzenia.
to będzie działać:
SET @WhereClause1 = 'where a.Date > ''' + cast(@InvoiceDate as varchar(100)) + ''''
EXEC sp_executesql N'SELECT * FROM Orders WHERE a.Date > @date',
N'@date datetime',
@date = @InvoiceDate
to nie działa, bo trzeba zamknięty datę (wewnątrz łańcucha) w cudzysłowie – eKek0
Ok, dzięki, będę go naprawić –
z "korekta zrobiła to, czego potrzebowałem. Dziękuję wszystkim – Jeff