我有日期时间类型的列,我在存储过程中使用它,将两个局部变量声明为 @From datetime 和 @To datetime
,但无论我做什么,我都会得到错误或者它只是运行存储过程而不返回任何记录(完全空白)。
set @mySql ='
select * from abc where (MyDATE between '''+ cast(@From as datetime) +''' and '''+ cast(@To as datetime)+''')'
最佳答案
执行此操作的唯一“正确”方法是将它们作为参数保存在动态 SQL 中。例如:
set @mySql =N'select * from abc where MyDATE between @from and @to';
exec sp_executesql @mySql, N'@from datetime, @to datetime', @fromOuter, @toOuter;
这可以使它们在动态代码中正确键入,并避免格式问题和 SQL 注入(inject)风险。注意,动态代码内部和外部的名称不需要匹配,如上例所示(@from
和@to
是动态代码中的名称; @fromOuter
和 @toOuter
是调用代码中的名称)。
请注意,如果您传入的参数多于实际使用的参数也没关系(这对于动态过滤方法来说是很正常的)。
关于sql - 存储过程sql中的日期转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849289/