Рассмотрим следующий TSQL:
SET @WhereClause1 = 'where a.Date > ' + @InvoiceDate
Я получаю ошибку преобразования даты / строки. @InvoiceDate - переменная даты и времени. Какой правильный синтаксис?
@InvoiceDate
Это может сработать.
SET @WhereClause1 = 'where a.Date > ''' + convert(varchar, @InvoiceDate) + ''''
хотя ошибка будет возникать, если значение равно нулю.
Это будет работать:
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
... и вам, вероятно, потребуется заключить строки даты в кавычки.
Вероятно, на самом деле было бы лучше построить строку даты в вызывающей подпрограмме, потому что вы должны проверять там нулевые значения и, возможно, другие проверки.
Поскольку вы сначала составляете запрос в виде строки, то, я думаю, вам нужно преобразовать @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