2010-02-24 20 views
1

我剛剛繼承了一個存儲過程,作爲插入新用戶的系統的一部分。
頂部,@user_id被宣佈爲INT OUTPUT,底部SET @user_id = @@IDENTITY,由於某種原因它總是返回零。如果我做的:強制輸出參數不是tinyint?

select @@IDENTITY 

...我避開的東西 '1872040'

如果我做的:

SET @user_id = 187300 

...我得到:

錯誤轉換數據類型int to smallint

我也得到相同的,如果我做的:

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

它需要SET @user_id = CAST(@@IDENITY as TINYINT)或只是@user_id = @@IDENITY它不給我的錯誤。然而,它只是返回null/0.所以,我一直在搜索,無法真正找到答案,有沒有更好的方法來強制輸出參數不是tinyint?這是在MS SQL。

+0

您可能需要將貼紙貼出來供我們看 - 這聽起來有點古怪!此外,您可能希望使用SCOPE_IDENTITY()而不是@@ IDENTITY – AdaTheDev 2010-02-24 22:00:58

回答

3

我轉載了一個可能會導致此問題的情況。我認爲它可能不是sproc本身,而是你調用sproc的方式 - 具體來說,調用代碼爲@user_id指定的數據類型。

例如

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

一旦表上的IDENTITY值超過了一個SMALLINT的容量,這會給你轉換錯誤。

因此,請確保您在調用代碼中指定了正確的數據類型。

此外,根據我的評論,您可能希望使用SCOPE_IDENTITY()而不是@@ IDENTITY。

+0

+1,正是我認爲 – 2010-02-24 22:21:03

+0

嗯,謝謝!我檢查了調用代碼(php)它被設置爲對應於BIGINT的SQLINT4 ..對吧? – lbalceda 2010-02-24 22:26:23