TSQL - вставка дат в динамический SQL - PullRequest
7 голосов
/ 02 апреля 2009

Рассмотрим следующий TSQL:

SET @WhereClause1 = 'where a.Date > ' + @InvoiceDate

Я получаю ошибку преобразования даты / строки. @InvoiceDate - переменная даты и времени. Какой правильный синтаксис?

Ответы [ 5 ]

8 голосов
/ 02 апреля 2009

Это может сработать.

SET @WhereClause1 = 'where a.Date > ''' + convert(varchar, @InvoiceDate) + ''''

хотя ошибка будет возникать, если значение равно нулю.

6 голосов
/ 02 апреля 2009

Это будет работать:

SET @WhereClause1 = 'where a.Date > ''' + cast(@InvoiceDate as varchar(100)) + ''''
1 голос
/ 26 апреля 2010
EXEC sp_executesql N'SELECT * FROM Orders WHERE a.Date > @date',
                   N'@date datetime',
                   @date = @InvoiceDate
1 голос
/ 02 апреля 2009

... и вам, вероятно, потребуется заключить строки даты в кавычки.

Вероятно, на самом деле было бы лучше построить строку даты в вызывающей подпрограмме, потому что вы должны проверять там нулевые значения и, возможно, другие проверки.

1 голос
/ 02 апреля 2009

Поскольку вы сначала составляете запрос в виде строки, то, я думаю, вам нужно преобразовать @InvoiceDate в строку с чем-то вроде 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...