sql - 存储过程sql中的日期转换

标签 sql sql-server t-sql c#-4.0

我有日期时间类型的列,我在存储过程中使用它,将两个局部变量声明为 @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/

相关文章:

php - SQL 问题 ... 我应该使用 Group By 吗?

MySQL根据文本单词进行计数

sql - 返回受 SQL 事务影响的总行数

sql - 回滚错误执行的 SQL 查询

sql - 动态sql脚本生成删除表语句列表

javascript - ES5 格式化长 SQL 查询的方法

sql-server - SQL Server : How to treat nulls as zeros

sql - TSQL:根据值将一列分成两列

sql - T-Sql算法问题

sql - 更新SQL后如何自动更新字段名称