如何将传递给存储过程的datetime变量与表中的datetime变量进行比较。
e.g。在我的where子句中@paramDate值是2/10/2012
set sql = 'WHERE product.RegisteredDate >= ' + @paramDate
当我执行exec(@sql)
时失败,错误:
Conversion failed when converting datetime from character string.
THX
答案 0 :(得分:3)
SET @sql = '... WHERE product.RegisteredDate >= '''
+ CONVERT(CHAR(8), @paramDate, 112) + ''';';
如果@ParamDate
为NULL
,您可以这样做:
SET @sql = 'SELECT ...';
SET @sql = @sql + COALESCE(' WHERE product.RegisteredDate >= '''
+ CONVERT(CHAR(8), @paramDate, 112) + ''';', '');
甚至:
SET @sql = 'SELECT ...';
IF @paramDate IS NOT NULL
BEGIN
SET @sql = @sql + '... WHERE product.RegisteredDate >= '''
+ CONVERT(CHAR(8), @paramDate, 112) + ''';';
END
答案 1 :(得分:2)
试试这个:
CONVERT(varchar, @paramDate, 101)
有关更多信息,请参阅此处: http://msdn.microsoft.com/en-us/library/ms187928.aspx
答案 2 :(得分:0)
由于您尝试执行动态查询,因此可以使用sp_executesql而不是exec,以便可以在生成的查询中使用参数。以下是sp_executesql的详细信息。
例如:
set @sql = 'WHERE product.RegisteredDate >= @dynamicParm'
EXECUTE sp_executesql @sql, N'@dynamicParm DATETIME', @dynamicParm = @paramDate