考虑以下TSQL:
SET @WhereClause1 = 'where a.Date > ' + @InvoiceDate
我收到日期/字符串转换错误。 @InvoiceDate
是日期时间变量。什么是正确的语法?
答案 0 :(得分:8)
这可能有用。
SET @WhereClause1 = 'where a.Date > ''' + convert(varchar, @InvoiceDate) + ''''
虽然如果值为null,则会引发错误。
答案 1 :(得分:6)
这将有效:
SET @WhereClause1 = 'where a.Date > ''' + cast(@InvoiceDate as varchar(100)) + ''''
答案 2 :(得分:1)
由于您首先将查询编写为字符串,因此我认为您需要将@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
答案 3 :(得分:1)
...您可能需要将日期字符串括在引号中。
在调用例程中构造日期字符串可能实际上更好,因为您应该在那里检查空值以及其他验证。
答案 4 :(得分:1)
EXEC sp_executesql N'SELECT * FROM Orders WHERE a.Date > @date',
N'@date datetime',
@date = @InvoiceDate