我在教自己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出现在我查询的表中。
答案 0 :(得分:5)
替换此部分
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()一样。