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
?
最佳答案
您可以向 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_
开头的存储过程:1 Martin 指出有些函数可以被调用,但这只是异常(exception)而不是规则,所以虽然我的陈述不是 100% 准确,但这样对待它不会伤害你。