MS SQL Server 2008。
为什么这解析好了:
CREATE TABLE #Held
(
Value decimal(18,4)
)
INSERT #Held EXEC dbo.sp_Held '2013-06-27', NULL
但这会产生语法错误('day'附近的语法错误。):
CREATE TABLE #Held
(
Value decimal(18,4)
)
INSERT #Held EXEC dbo.sp_Held DATEADD(day, -1, getdate()), NULL
答案 0 :(得分:8)
您可以将文字值或变量传递给EXEC
- 特别是,您不能使用任何形式的复杂表达式或函数调用 1 。因此,如果要计算值,则需要将其放在单独语句中的变量中:
CREATE TABLE #Held
(
Value decimal(18,4)
)
DECLARE @a datetime
SET @a = DATEADD(day, -1, getdate())
INSERT #Held EXEC dbo.sp_Held @a, NULL
此外,您应该避免命名以sp_
开头的存储过程:
在命名过程时避免使用 sp _ 前缀。 SQL Server使用此前缀来指定系统过程。如果存在具有相同名称的系统过程,则使用前缀可能导致应用程序代码中断。
1 Martin指出可以调用一些函数,但这是异常而不是规则,所以虽然我的陈述不是100%准确,如此对待它不会伤害你。