2012-08-01 23 views
0

MS SQL插入觸發器會因爲返回結果而導致一些問題。有沒有辦法禁用發送的結果?我已經使用'set nocount on',但這似乎並沒有太多...來自插入觸發器的抑制結果

create trigger tr_insert_raw_data 
on raw_data 
instead of insert 
as 
begin 
set nocount on 

declare @query varchar(max); 
declare @rev int; 
declare @id int; 
declare @oldrev int; 
declare @contextinfo VARBINARY(128) 

select @contextinfo = context_info() 
if @contextinfo = 0x00001 
begin 
    insert into raw_data select * from inserted 
    return 
end 

select * into #query from inserted 
set @id = (select count(distinct id) from raw_data); 
set @id += 1; 
insert into revisions (username, hostname, ts) values (SYSTEM_USER, HOST_NAME(), GETDATE()) 
set @rev = (select max(id) from revisions); 

select @oldrev = revision_id from inserted; 
if @oldrev is null set @[email protected]; 

select * into #inserted from inserted 
update #inserted set revision_id = @rev, id = @id 
select * from #inserted 
insert into raw_data select * from #inserted 
insert into edges (a, b) values (@oldrev, @rev) 
end 

回答

0

你會得到什麼樣的結果? 查詢快速審查後,我首先想到的就是你得到的結果是由於你有

select * from #inserted 

線(從倒數第三行)。這條線告訴我你正在請求結果,這可能是爲什麼你會得到一些結果?

如果您確實需要從表格中選擇要修改或自定義選擇的值,也許CTE會幫助您? (Common Table Expressions

+0

哦,是的,當然。我有這條線進行調試,並忘記將其刪除。非常感謝! – Max 2012-08-01 03:47:41

+0

很高興我能幫到你。請通過選擇我的帖子作爲正確答案來指出問題的答案。 謝謝,恩喬伊! – Neville 2012-08-01 05:15:38

+0

當然........... – Max 2012-08-01 07:02:07