1
此代碼有什麼問題。插入更新後的SQL觸發器
如果我像這樣輸入
Declare tmp as CURSOR FOR
Select i.ID from Inserted
OPEN tmp
或者如果我鍵入
Declare tmp as CURSOR FOR
Select i.ID from Deleted
OPEN tmp
就像一個魅力,但
有什麼辦法,我可以寫這樣的事情
if @operation <> 3
set @tmp = 'SELECT i.id FROM inserted i '
else
set @tmp =' SELECT i.id FROM deleted i '
DECLARE tmpUpit CURSOR FOR
@tmp
OPEN tmpUpit
編輯:
CREATE TRIGGER [dbo].[ax_Triger] ON [dbo].[extraTable]
FOR INSERT, UPDATE, DELETE AS
SET NOCOUNT ON;
--Capture the Operation (Inserted, Deleted Or Updated)
DECLARE @operation int
DECLARE @Count AS INT
SET @operation = 1
SELECT @Count = COUNT(*)
FROM DELETED
IF @Count > 0
BEGIN
SET @operation = 3
SELECT @Count = COUNT(*)
FROM INSERTED
IF @Count > 0
SET @operation = 2
END
DECLARE tmpUpit CURSOR FOR
SELECT i.id FROM inserted i
OPEN tmpUpit
FETCH NEXT FROM tmpUpit
into @ID WHILE @@fetch_status = 0
begin If Not exists
(SELECT * FROM mytable
where (Operation=3 OR (Operation=1 AND [email protected])) AND Status = 0 AND Tablename ='extraTable')
begin INSERT INTO
mytable ([Field1], [Field2],
[ID], [Tablename], [Operation], [Time12], [Status])
VALUES (@Field1, @Field2, @ID, 'extraTable', @operation,GETDATE(),0)
DELETE FROM mytable
WHERE [Field1][email protected] And [Field2][email protected] And [ID][email protected] And [Tablename]='extraTable'
AND [Operation] = 4 AND [Status] = 0
End
FETCH NEXT FROM tmpUpit into @ID
End CLOSE tmpUpit DEALLOCATE tmpUpit end
我需要從一個表中插入值到另一個根據有關插入/更新狀態/刪除
爲什麼你想要一個遊標呢?他們效率非常低下。您嘗試的方法將無法正常工作,因爲您已經跨越到動態SQL地域。如果你可以發佈一些關於你的觸發器試圖做什麼的細節,我們可以幫助你找到一個不需要光標的基於集合的方法。 –
@SeanLange我剛剛編輯..這是我的第一個觸發器 – myString
@myString,你可以有條件地聲明它,你甚至可以將遊標變量作爲參數傳遞給SP。你不需要動態的sql。但不知何故,我認爲你需要'完全加入'。 –