强制输出参数不是tinyint?

时间:2010-02-24 21:57:48

标签: sql-server

我刚刚继承了存储过程,作为插入新用户的系统的一部分 在顶部,@user_id声明为INT OUTPUT,底部为SET @user_id = @@IDENTITY,由于某种原因,它始终返回零。如果我这样做:

select @@IDENTITY 

......我得到的东西'1872040'

如果我这样做:

SET @user_id = 187300  

......我明白了:

  

将数据类型int转换为smallint时出错

如果我这样做,我也会这样做:

SET @user_id = CAST(@@IDENITY as INT)... 

它必须是SET @user_id = CAST(@@IDENITY as TINYINT)@user_id = @@IDENITY,因为它不会给我错误。然而,它只返回null / 0.所以,我在谷歌上搜索并无法真正找到答案,是否有更好的方法来强制输出参数不是tinyint?这是在ms sql中。

1 个答案:

答案 0 :(得分:3)

我已经复制了可能导致此问题的方案。我认为它可能不是sproc本身,而是你调用sproc的方式 - 具体来说,调用代码为@user_id指定了数据类型。

e.g。

DECLARE @user_id SMALLINT -- THIS IS WRONG, SHOULD BE INT
EXECUTE YourSproc 'ValueA', @user_id OUTPUT

一旦表上的IDENTITY值超过SMALLINT的容量,就会出现转换错误。

因此,请确保在调用代码中指定正确的数据类型。

另外,根据我的评论,您可能希望使用SCOPE_IDENTITY()而不是@@ IDENTITY。