2013-07-07 86 views
4

我正在教自己的SQL Server作爲一種愛好。我一直在向關係表中插入數據,我理解關係表的想法。如何插入關係表

我想知道是否有人可以告訴我如何獲取先前插入的行存儲的身份作爲一個變量在其餘查詢中用作FK。

這裏是我的TSQL代碼:

CREATE PROCEDURE [dbo].[q_insertuser] 
@username varchar(50), 
@hash varchar(MAX), 
@name varchar(50), 
@email varchar(MAX), 
@address varchar(MAX), 
@city varchar(50), 
@postcode varchar(50) 

AS 
--INSERT USERNAME 
    INSERT INTO tab_user 
    (username) 
    VALUES 
    (@username) 

    --Selects the Userid to be used 
DECLARE @UID INT 
SET @UID = INT FOR SELECT * 
        FROM tab_user 
        WHERE (userid = SCOPE_IDENTITY()) 

--INSERT PASSWORD 
    INSERT INTO tab_pass 
    (userid, hash) 
    VALUES 
    (@UID ,@hash) 

--INSERT Address 
    INSERT INTO tab_contact 
    (userid,name, email, address, city, postcode) 
    VALUES 
    (@UID ,@name, @email, @address, @city, @postcode) 
--RETURN 0 

我在網上看到的例子似乎在做這樣說,但我從VS

(76,1得到一個典型的神祕的錯誤):SQL72014:.Net SqlClient數據提供程序:消息207,級別16,狀態1,過程q_insertuser,行19無效的列名'userid'。
正在執行批處理時發生錯誤。

但是,列名userid存在我正在查詢的表。

回答

5

與此

DECLARE @UID INT 
SET @UID = SCOPE_IDENTITY() 

更換這部分

DECLARE @UID INT 
SET @UID = INT FOR SELECT * 
        FROM tab_user 
        WHERE (userid = SCOPE_IDENTITY()) 

您可以直接分配SCOPE_IDENTITY()函數的變量,就像GETDATE()或DB_NAME()。

+0

另一種方法是使用'OUTPUT'子句。 – a1ex07

+0

謝謝你的工作完美。 – Qu1nncunxIV