如何插入关系表

Qu1*_*xIV 4 t-sql sql-server

我在教自己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
Run Code Online (Sandbox Code Playgroud)

我在网上看到的例子似乎是这样做的,但我从VS得到了一个典型的神秘错误

(76,1):SQL72014:.Net SqlClient数据提供程序:消息207,级别16,状态1,过程q_insertuser,第19行无效的列名称"userid".
批处理执行时发生错误.

但是,列名userid出现在我查询的表中.

SQL*_*ace 5

替换这部分

DECLARE @UID INT
SET @UID = INT FOR SELECT *
                     FROM tab_user
                     WHERE (userid = SCOPE_IDENTITY())
Run Code Online (Sandbox Code Playgroud)

有了这个

DECLARE @UID INT
SET @UID =  SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

您可以将SCOPE_IDENTITY()函数直接分配给变量,就像getdate()或db_name()一样.