gpt4 book ai didi

sql-server - 插入 SQL Server View 时使用 @@identity 或输出?

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

(请原谅 - 我是 StackOverflow 和 SQL 的新手)Tl;dr - 使用 @@identity(或任何其他选项,如 scope_identity 或输出变量)时,是否也可以使用 View ?下面是一个使用 @@identity 的存储过程示例:

--SNIP--
DECLARE @AID INT
DECLARE @BID INT


INSERT INTO dbo.A (oct1)
VALUES
(@oct1)

SELECT @AID = @@IDENTITY;

INSERT INTO dbo.B (duo1)
VALUES
(@duo2)

SELECT @BID = @@IDENTITY

INSERT INTO dbo.tblAB (AID, BID)
VALUES
(@AID, @BID)
GO

更长:

插入表时,您可以使用 @@identity 捕获标识种子的当前值。如果您想插入表 A 和 B,捕获标识值,然后插入到关联 A 和 B 的表 AB,这将很有用。显然,这是为了数据规范化。

假设您要使用一些在表上执行内部联接的数据库架构来抽象化数据库架构,以使数据更易于使用。在这种情况下,您将如何正确填充交叉引用表?能否以同样的方式完成,如果可以,怎么做?

最佳答案

如果您的系统正在使用并行计划,请避免使用 @@IDENTITY 或 SCOPE_IDENTITY(),因为存在严重错误。请引用- http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=328811

获取插入的身份 ID 的更好方法是使用 OUTPUT 子句。

CREATE TABLE tblTest
(
Sno INT IDENTITY(1,1) NOT NULL,
FirstName VARCHAR(20)
)

DECLARE @pk TABLE (ID INT)

INSERT INTO tblTest(FirstName)
OUTPUT INSERTED.Sno INTO @pk
SELECT 'sample'

SELECT * FROM @pk

编辑:

它也适用于 View 。请参阅下面的示例。希望这就是您要找的。

CREATE VIEW v1
AS
SELECT sno, firstname FROM tbltest
GO

DECLARE @pk TABLE (ID INT)

INSERT INTO v1(FirstName)
OUTPUT INSERTED.Sno INTO @pk
SELECT 'sample'

SELECT ID FROM @pk

关于sql-server - 插入 SQL Server View 时使用 @@identity 或输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11534500/

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