sta*_*r84 2 sql-server identity view seed
(原谅我 - 我是StackOverflow和SQL的新手)Tl; dr - 当使用@@identity(或任何其他选项,如scope_identity或输出变量)时,是否也可以使用视图?以下是使用以下内容的存储过程示例@@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
Run Code Online (Sandbox Code Playgroud)
更长:
插入表时,可以使用捕获标识种子的当前值@@identity.如果要插入表A和B,捕获标识值,然后插入表AB,将A与B相关,这很有用.显然,这是出于数据规范化的目的.
假设您要使用一些在表上执行内部联接的数据库抽象数据库模式,以使数据更易于使用.在这种情况下,您将如何正确填充交叉引用表?可以这样做,如果是这样,怎么样?
如果您的系统使用并行计划,请避免使用@@ 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
Run Code Online (Sandbox Code Playgroud)
编辑:
它也适用于Views.请参阅下面的示例.希望这是你想要的.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13006 次 |
| 最近记录: |