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