sql-server-2008 - 为什么在存储过程调用的参数之一上使用 CONVERT 会出错?

标签 sql-server-2008 tsql sql-server-2008-r2

出于某种原因,以下给了我一个错误:

DECLARE @Param1 DATETIME2(3)=...; -- Assign some date/time
DECLARE @Param2 DATETIME;
DECLARE @Param3 DATETIME;

EXEC dbo.SomeStoredProc CONVERT(DATE, @Param1), @Param2 output, @Param3 output;

输出是编译失败:

Msg 156, Level 15, State 1, Line 5 Incorrect syntax near the keyword 'CONVERT'.



将其更改为以下可解决问题:
DECLARE @Param1 DATETIME2(3)=...; -- Assign some date/time
DECLARE @Param2 DATETIME;
DECLARE @Param3 DATETIME;
DECLARE @TempDate DATE=CONVERT(DATE,@Param1);

EXEC dbo.SomeStoredProc @TempDate, @Param2 output, @Param3 output;

最佳答案

存储过程参数不能包含表达式,它们必须是常量值或 @变量。在您的示例中,CONVERT()是一个表达式,因此是不允许的。

默认参数值也是如此。

关于sql-server-2008 - 为什么在存储过程调用的参数之一上使用 CONVERT 会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230960/

相关文章:

sql - 将行/表记录转换为sql server中的json文档

sql-server - 非分区表的 sys.partition 中的多个记录

sql-server-2008 - 在 SQL 2008 中使用日期查找上周一

sql-server - SQL : Group by one column, 计算所有行并根据 row_number 保留第二列的值

sql-server-2008 - 在插入数据库之前删除重复项

sql - 从 SQL Server 2012 中具有几何数据的表中将坐标划分为 X 和 Y 坐标

sql-server - 如何使用SQL Server查找与某个表关联的所有触发器?

TSQL:over 子句

c# - 为可为 Null 的列添加唯一键 - SQL Server

sql - 根据不同的条件在同一个表上多次连接与在聚合表上连接一次