Sql 从INSERT到存储过程的输出
我正在编写一个存储过程,首先在表中插入新行。然后,另一个查询需要此查询生成的ID。是否可以使用输出访问先前生成的ID 这就是我到目前为止所做的,这几乎是一个猜测,没有工作Sql 从INSERT到存储过程的输出,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我正在编写一个存储过程,首先在表中插入新行。然后,另一个查询需要此查询生成的ID。是否可以使用输出访问先前生成的ID 这就是我到目前为止所做的,这几乎是一个猜测,没有工作 ALTER PROCEDURE [dbo].[addApp] @Name varchar(50) , @logoUrl varchar(150) , @siteUrl varchar(150) , @userId int , @canvasWidth int , @can
ALTER PROCEDURE [dbo].[addApp]
@Name varchar(50)
, @logoUrl varchar(150)
, @siteUrl varchar(150)
, @userId int
, @canvasWidth int
, @canvasHeight int
AS
DECLARE @tempId INT
SET @tempid = INSERT INTO AppInfo (name, logoUrl, userId)
OUTPUT inserted.id
VALUES(@Name, @logoUrl, @userId);
INSERT INTO CanvasApps (id, siteUrl, canvasWidth, canvasHeight)
OUTPUT inserted.id
VALUES(@tempid, @siteUrl, @logoUrl, @userId);
只需使用以下变量:
@@IDENTITY
declare @tempId table (
id int
)
INSERT INTO AppInfo (name, logoUrl, userId)
OUTPUT inserted.id into @tempId
VALUES(@Name, @logoUrl, @userId);
您需要将
输出的结果
放入一个表中,而不仅仅是一个标量变量:
@@IDENTITY
declare @tempId table (
id int
)
INSERT INTO AppInfo (name, logoUrl, userId)
OUTPUT inserted.id into @tempId
VALUES(@Name, @logoUrl, @userId);
试试这个-
ALTER PROCEDURE [dbo].[addApp]
@Name VARCHAR(50)
, @logoUrl VARCHAR(150)
, @siteUrl VARCHAR(150)
, @userId INT
, @canvasWidth INT
, @canvasHeight INT
AS BEGIN
DECLARE @tempId INT
INSERT INTO dbo.AppInfo (name, logoUrl, userId)
SELECT @Name, @logoUrl, @userId
SELECT @tempId = SCOPE_IDENTITY()
INSERT INTO dbo.CanvasApps (id, siteUrl, canvasWidth, canvasHeight)
SELECT @tempId, @siteUrl, @logoUrl, @userId
END
只需在insert语句之后尝试此操作,并在第二个insert语句中使用此变量即可。:-
SET @BVar=SCOPE_IDENTITY()
您甚至可以在一条语句中执行此操作:
ALTER PROCEDURE [dbo].[addApp]
@Name VARCHAR(50)
, @logoUrl VARCHAR(150)
, @siteUrl VARCHAR(150)
, @userId INT
, @canvasWidth INT
, @canvasHeight INT
AS BEGIN
INSERT INTO dbo.AppInfo (name, logoUrl, userId)
OUTPUT Inserted.ID, @siteUrl, @canvasWidth , @canvasHeight
INTO dbo.CanvasApps (id, siteUrl, canvasWidth, canvasHeight)
VALUES (@Name, @logoUrl, @userId)
END
您应该使用,因为这仅限于As
@@Identity
不是的当前范围。我想除了为哈希创建salt之外,我从来没有见过一个地方可以用@@Identity
作为解决方案Scope_Identity()
据称是固定的,OUTPUT
通常更有用。奇怪的是,你在说了OUTPUT
不能转到变量之后,创建了一个变量表来演示。标量变量和表变量之间存在差异。同意。你回答的第一行应该说明这一点。当有文档和数百个示例时,你为什么要猜?很抱歉,我没有找到任何关于如何在这种情况下使用输出的好示例。现在我得到了一个完美的答案,希望它也能帮助其他人。和平