gpt4 book ai didi

sql-server - 使用输出关键字获取SQL Server中最后插入的记录?

转载 作者:行者123 更新时间:2023-12-02 17:29:38 25 4
gpt4 key购买 nike

我有this tool (SSMS 工具包)为特定表生成 CRUD sp

但是我看看“插入”代码

/*1*/   CREATE PROC [dbo].[usp_EServices_ME_Country_InfoInsert] 
/*2*/ @MasterEntityID int,
/*3*/ ...
/*4*/ AS
/*5*/ SET NOCOUNT ON
/*6*/ SET XACT_ABORT ON
/*7*/
/*8*/ BEGIN TRAN
/*9*/
/*10*/ INSERT INTO [dbo].[EServices_ME_Country_Info] ([MasterEntityID],...)
/*11*/ SELECT @MasterEntityID, ...
/*12*/
/*13*/ -- Begin Return Select <- do not remove
/*14*/ SELECT [ID], [MasterEntityID],...
/*15*/ FROM [dbo].[EServices_ME_Country_Info]
/*16*/ WHERE [ID] = SCOPE_IDENTITY()
/*17*/ -- End Return Select <- do not remove
/*18*/
/*19*/ COMMIT
/*20*/ GO

我的问题是关于第 14 行 - 他们/我可以使用 output 关键字吗?如果是这样,输出会返回所有插入的记录吗? (如果第 11 行有 >1 个插入记录)

最佳答案

有趣的问题!基于 OUTPUT 子句 here 的信息,我认为你可以改变这一点:

INSERT INTO [dbo].[EServices_ME_Country_Info] ([MasterEntityID],...)
SELECT @MasterEntityID, ...

-- Begin Return Select <- do not remove
SELECT [ID], [MasterEntityID],...
FROM [dbo].[EServices_ME_Country_Info]
WHERE [ID] = SCOPE_IDENTITY()
-- End Return Select <- do not remove

对此:

INSERT INTO [dbo].[EServices_ME_Country_Info] ([MasterEntityID],...)
OUTPUT INSERTED.MasterEntityID, ...
SELECT @MasterEntityID, ...

结果相同。目前这只是理论,我将进行测试并跟进。

跟进:

我的 OUTPUT 子句不正确,您必须在 INSERT 子句之后使用 OUTPUT。在上面的查询中进行了编辑。我使用以下代码来测试这一点:

-- Create a test table
CREATE TABLE TestTable (
ID INT IDENTITY
,TestV1 INT
,TestV2 INT
,TestV3 INT
);
GO

-- Example sp with the 'old' method using SCOPE_IDENTITY()
CREATE PROCEDURE usp_InsertFirstMethod
(
@v1 INT
,@v2 INT
,@v3 INT
)
AS

SET NOCOUNT ON
SET XACT_ABORT ON

BEGIN TRAN

INSERT INTO dbo.TestTable (TestV1, TestV2, TestV3)
SELECT @v1, @v2, @v3;

-- Begin Return Select <- do not remove
SELECT ID, TestV1, TestV2, TestV3
FROM dbo.TestTable
WHERE ID = SCOPE_IDENTITY()
-- End Return Select <- do not remove

COMMIT TRAN;
GO

-- Example sp to show use of OUTPUT clause
CREATE PROCEDURE usp_InsertSecondMethod
(
@v1 INT
,@v2 INT
,@v3 INT
)
AS

SET NOCOUNT ON
SET XACT_ABORT ON

BEGIN TRAN

INSERT INTO dbo.TestTable (TestV1, TestV2, TestV3)
OUTPUT INSERTED.*
SELECT @v1, @v2, @v3;

COMMIT TRAN;
GO

EXECUTE dbo.usp_InsertFirstMethod 1, 2, 3;EXECUTE dbo.usp_InsertSecondMethod 1, 2, 3; 显示相同的结果。似乎有效!

关于sql-server - 使用输出关键字获取SQL Server中最后插入的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17716820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com