环境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)
答案 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。
我建议创建一个遍历字符的函数,并删除任何非数字的函数。