存储过程并在参数调用中使用tsql函数

时间:2011-05-05 16:36:55

标签: sql sql-server sql-server-2005 tsql

环境sql server 2005 sp3

我有一个以INT作为输入的存储过程。我想在调用存储过程中向一个CHAR CAST一个CHAR。我似乎无法做到这一点。我在@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)

2 个答案:

答案 0 :(得分:3)

首先,你不能把'11test'作为一个int

第二,如果值可以转换为int,则不需要强制转换,会发生隐式转换

DECLARE @foo AS CHAR(6)
set @foo = '2'


EXEC testMe @test =@foo

如果你想测试它是否可以转换为int,请从这里获取IsInt函数:IsNumeric, IsInt, IsNumber并在进行proc调用之前使用它进行测试

修改

这是你如何做到的

DECLARE @foo AS CHAR(6)
set @foo = '11test'
SET @foo = CAST(Substring(@foo,1,2) as int)

EXEC testMe @test = @foo

你不能将函数传递给procs,这就是GETDATE()无法工作的原因,要么使用中间变量要么强制转换为同一个变量

答案 1 :(得分:0)

如果char字段包含非数字字符,则无法将其转换为int。

我建议创建一个遍历字符的函数,并删除任何非数字的函数。