我自学 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 得到一个典型的神秘错误



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

最佳答案

更换这部分

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

有了这个
DECLARE @UID INT
SET @UID =  SCOPE_IDENTITY()

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

关于sql-server - 如何插入关系表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17512346/

10-10 12:47