TSQL-вставка дат в динамический SQL
рассмотрим следующий TSQL:
SET @WhereClause1 = 'where a.Date > ' + @InvoiceDate
Я получаю ошибку преобразования даты/строки. @InvoiceDate
- переменная типа datetime. Каков правильный синтаксис?
5 ответов
Это может сработать.
SET @WhereClause1 = 'where a.Date > ''' + convert(varchar, @InvoiceDate) + ''''
хотя ошибка будет вызвана, если значение равно null.
Это будет работать:
SET @WhereClause1 = 'where a.Date > ''' + cast(@InvoiceDate as varchar(100)) + ''''
поскольку сначала вы составляете запрос как строку, я думаю, вам нужно преобразовать @InvoiceDate в строку с чем-то вроде этой. 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
... и вам, вероятно, придется заключить строки даты в кавычки.
вероятно, было бы лучше построить строку даты в вызывающей процедуре, потому что вы должны проверять там значения null и, возможно, другие проверки.
EXEC sp_executesql N'SELECT * FROM Orders WHERE a.Date > @date',
N'@date datetime',
@date = @InvoiceDate