我有一種情況需要將多個記錄/批量插入插入到具有觸發器的視圖中。我如何檢索插入的身份值?我嘗試使用OUTPUT子句從Inserted表中檢索Id,但它總是返回null。tsql在將多個記錄插入視圖時返回標識值
1
A
回答
1
使用此設置。
create table InsteadOf
(
ID int identity primary key,
Name varchar(10) not null
)
go
create view v_InsteadOf
as
select ID, Name
from InsteadOf
go
create trigger tr_InsteadOf on InsteadOf instead of insert
as
begin
insert into InsteadOf(Name)
select Name
from inserted
end
聲明
insert into v_InsteadOf(Name)
output inserted.*
select 'Name1' union all
select 'Name2'
會給你一個錯誤。
消息334,級別16,狀態1,4號線的 DML語句不能有任何啓用的觸發器如果語句 有未經INTO子句的OUTPUT子句的目標表「與其使用」。
改爲使用插入INTO子句。
declare @IDs table(ID int, Name varchar(10))
insert into v_InsteadOf(Name)
output inserted.* into @IDs
select 'Name1' union all
select 'Name2'
select *
from @IDs
給你0
作爲值不null
。
ID Name
----------- ----------
0 Name1
0 Name2
您可以將輸出子句放在觸發器中。
create trigger tr_InsteadOf on InsteadOf instead of insert
as
begin
insert into InsteadOf(Name)
output inserted.*
select Name
from inserted
end
並且當您執行插入操作時會爲您生成輸出。
insert into v_InsteadOf(Name)
select 'Name1' union all
select 'Name2'
結果:
ID Name
----------- ----------
1 Name1
2 Name2
更新:
爲了抓住插入語句的輸出,你可以使用insert into ... exec (...)
declare @T table
(
ID int,
Name varchar(10)
)
insert into @T
exec
(
'insert into v_InsteadOf(Name)
values (''Name1''),(''Name2'')'
)
+0
如何將這些返回的值存儲到表變量以供以後使用?下面的查詢返回0作爲插入行的id。 DECLARE @T TABLE(ID INT,NAME VARCHAR(10)) INSERT INTO v_InsteadOf(名稱) OUTPUT插入。* INTO @T VALUES( 'GK'),( 'GV') SELECT * FROM @ T – vgk
+0
@vgk - 更新了我的答案。 –
相關問題
- 1. 如何插入多個記錄並獲取標識值?
- 2. C#SqlCommand插入多個記錄時返回輸入參數
- 3. sqldatasource插入返回標識值
- 4. 如何在使用ElevateDB插入記錄時返回ID值
- 5. 爲多個記錄返回單個值
- 6. TSQL多個插入
- 7. TSQL用多個記錄加入問題
- 8. TSQL結合多個記錄
- 9. 從SQL返回多個值標記
- 10. WCF - 返回多個記錄
- 11. TSQL查詢所有記錄必須存在以返回記錄
- 12. 將多個記錄插入Access DB
- 13. 在插入Oracle後返回標識列的值
- 14. TSQL返回的第一條記錄
- 15. 插入後返回多個值
- 16. SQL Server - 在使用視圖而不是觸發器時獲取插入的記錄標識值
- 17. 返回一個值。 TSQL
- 18. TSQL從XML字符串插入記錄
- 19. db插入後的$ this - > {Model} - > id是否總是返回最後一個插入記錄的標識
- 20. TSQL每個記錄加入一個cte並插入
- 21. 在表中插入記錄後返回自動增量值
- 22. Rails 3 - 創建視圖以插入多個記錄
- 23. 在將記錄插入到sql server時生成自定義標識符
- 24. 在Symfony中插入記錄時返回Doctrine_Null對象
- 25. 將值返回父視圖
- 26. 的Sql將一個記錄插入到多條記錄
- 27. 使用UDT插入並返回標識值
- 28. 插入值返回標識的PDO以MSSQL使用ODBC
- 29. 插入行後從表中返回標識值
- 30. 標記記錄插入
您可以使用內部的'OUTPUT'條款'INSTEAD OF'觸發自己。或許使用條件邏輯檢查'CONTEXT_INFO'來知道是否使用或不使用子句來調用插入語句。# –