如何向关系表中插入数据

4

我正在自学 SQL Server,作为一种兴趣爱好。我卡在了将数据插入关系表中的步骤上,虽然我理解了关系表的思想。

我想知道是否有人可以告诉我如何获取先前插入行的标识(identity),并将其存储为变量以供后续查询使用。

以下是我的 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 数据提供程序:Msg 207, Level 16, State 1, Procedure q_insertuser, Line 19 Invalid column name 'userid'.
在执行批处理时发生错误。

然而,在我查询的表中,列名userid确实存在。
1个回答

5

替换这部分

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

使用这个

DECLARE @UID INT
SET @UID =  SCOPE_IDENTITY()

你可以像调用getdate()或db_name()一样,直接将SCOPE_IDENTITY()函数赋值给变量。


另一种方法是使用OUTPUT子句。 - a1ex07

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接