rem*_*rem 6 t-sql sql-server identity transactions
在TSQL事务中,我有一个操作,即将记录插入到a MyTable1和更新a的操作中,该操作MyTable2使用记录的Identity列值进行更新MyTable1,该操作仅在提交事务后插入.
那么,如何在实际插入表之前获取这个自动生成的值?
代码只是为了说明问题:
CREATE TABLE MyTable1(
MyTable1Id int identity(1,1) primary key,
Field1 varchar(50)
)
CREATE TABLE MyTable2(
MyTable2Id int identity(1,1) primary key,
MyTable1Id int
)
CREATE PROCEDURE MyProc(
@MyVal1 [varchar](50)
)
AS
BEGIN TRAN
-- try to insert
INSERT INTO MyTable1(
Field1
)
SELECT @MyVal1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
-- update MyTable2
DECLARE @TheUnknownIdValue int
UPDATE MyTable2
SET MyTable1Id = @TheUnknownIdValue -- how to get the value needed here?
WHERE ...
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
在使用SCOPE_IDENTITY() 之后使用INSERT
--
DECLARE @newId INT
INSERT INTO MyTable1(
Field1
)
SELECT @MyVal1
--End of Insert here
SELECT @newId = SCOPE_IDENTITY()
--Rest of the procedure
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10405 次 |
| 最近记录: |