Kev*_*Kev 4 t-sql sql-server stored-procedures sql-server-2008
MS SQL Server 2008.
为什么这解析好了:
CREATE TABLE #Held
(
Value decimal(18,4)
)
INSERT #Held EXEC dbo.sp_Held '2013-06-27', NULL
Run Code Online (Sandbox Code Playgroud)
但这会产生语法错误('day'附近的语法不正确.):
CREATE TABLE #Held
(
Value decimal(18,4)
)
INSERT #Held EXEC dbo.sp_Held DATEADD(day, -1, getdate()), NULL
Run Code Online (Sandbox Code Playgroud)
?
您可以传递文字值或变量,而不是其他任何东西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
Run Code Online (Sandbox Code Playgroud)
此外,您应该避免命名存储过程,从以下开始sp_
:
在命名过程时避免使用sp_前缀.SQL Server使用此前缀来指定系统过程.如果存在具有相同名称的系统过程,则使用前缀可能导致应用程序代码中断.
1马丁指出可以调用某些函数,但这是一个例外,而不是规则,因此虽然我的陈述不是100%准确,但是如此处理它不会对你造成伤害.
归档时间: |
|
查看次数: |
8549 次 |
最近记录: |