Sql server 强制输出参数不为tinyint?
我刚刚继承了一个存储过程,作为插入新用户的系统的一部分。Sql server 强制输出参数不为tinyint?,sql-server,Sql Server,我刚刚继承了一个存储过程,作为插入新用户的系统的一部分。 在顶部,@user\u id声明为INT-OUTPUT,在底部,设置@user\u id=@@IDENTITY,由于某种原因,它总是返回零。如果我这样做: select @@IDENTITY …我在1872040左右找到了一些东西 如果我这样做: SET @user_id = 187300 …我得到: 将数据类型int转换为smallint时出错 如果我这样做,我也会得到同样的结果: SET @user_id = CAST(@@
在顶部,
@user\u id
声明为INT-OUTPUT
,在底部,设置@user\u id=@@IDENTITY
,由于某种原因,它总是返回零。如果我这样做:
select @@IDENTITY
…我在1872040左右找到了一些东西
如果我这样做:
SET @user_id = 187300
…我得到:
将数据类型int转换为smallint时出错
如果我这样做,我也会得到同样的结果:
SET @user_id = CAST(@@IDENITY as INT)...
它需要
设置@user\u id=CAST(@@IDENITY as TINYINT)
或只设置@user\u id=@@IDENITY
,才能不给我错误。但是,它只返回null/0。所以,我在谷歌上四处搜索,却找不到答案,有没有更好的方法来强制输出参数不为tinyint?这是在ms sql中 我重现了一个可能导致此问题的场景。我认为这可能不是存储过程本身,而是您调用存储过程的方式——特别是,调用代码为@user_id指定的数据类型
e、 g
一旦表上的标识值超过SMALLINT的容量,就会出现转换错误
因此,请确保在调用代码中指定了正确的数据类型
另外,根据我的评论,您可能希望使用而不是@@IDENTITY。您可能需要发布存储过程供我们查看-老实说,这听起来有点奇怪!另外,您可能希望使用SCOPE_IDENTITY()而不是@IDENTITYHmm谢谢!我检查了调用代码(php),它被设置为SQLINT4,对应于BIGINT。。正确的?
DECLARE @user_id SMALLINT -- THIS IS WRONG, SHOULD BE INT
EXECUTE YourSproc 'ValueA', @user_id OUTPUT