使用tsql函数的存储过程参数?

geo*_*170 3 sql-server-2005 sql-server

环境sql server 2005 sp3

我有一个以 INT 作为输入的存储过程。我想在调用存储过程期间将 CHAR 转换为 INT。看来我不能那样做。我在@foo 之前收到语法错误。我没有看到它请有人帮我找到它。非常感谢。

CREATE PROCEDURE testme
@test AS INT
AS
BEGIN
SELECT @TEST
END

    DECLARE @foo AS CHAR(6)
set @foo = '11test'
EXEC testMe @test = CAST(Substring(@foo,1,2) as int)
Run Code Online (Sandbox Code Playgroud)

SQL*_*tar 10

为什么不在 SET @foo 时执行 CAST 呢?

SET @foo = CAST(Substring('11test',1,2) as int)
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用第二个变量并执行以下操作:

SET @foo1 = '11test'
SET @foo2 = CAST(Substring(@foo1,1,2) as int)
Run Code Online (Sandbox Code Playgroud)

然后只需调用 proc:

EXEC testMe @test = @foo2
Run Code Online (Sandbox Code Playgroud)


gbn*_*gbn 10

SQL Rockstar 的答案是如何修复它:我会添加一个解释。

存储过程参数可以是常量或变量:不是表达式。CAST 是一个表达式。(这与可以接受表达式的 udf 参数不同)

MSDN 上的 EXEC状态

... @parameter = ] { 值 | @变量 [ 输出 ] | [ 默认 ] }