當插入時,我需要編輯一個值,如果它是空的。我創建了一個觸發器,但我不知道如何編輯插入的表。

ALTER TRIGGER [ trigger1] on [dbo].[table]
而不是of insert。
as
declare @secuencia bigint, @ID_PERSONAVARCHAR;
select @secuencia = SECUENCIA from Inserted
select @ID_PERSONA = ID_PERSONA from inserted
如果@secuencia 是 null begin
set inserted.SECUENCIA = NEXT VALUE FOR SEQ_BIOINTEG --(sequence)
end
uj5u.com熱心網友回復:
我不知道如何編輯插入的表格。
你不知道。那個表是只讀的。
注意你的觸發器也是這樣說的:
instead of insert
沒有辦法編輯插入的表。
你要做的是為原始表設定一個 INSERT 命令,使用來自插入表的資料來過濾插入的 ROWS - 主要是通過一個連接。
改變inserted在邏輯上是沒有意義的--因為SQL中的觸發器是以下兩種情況之一:
注意,我說的是行 - 你的觸發器有一個非常基本的錯誤:它假設 inerted 包含一條行。它是一個表--變化可能來自插入多行的插入陳述句(這很簡單,即選擇進入,或者簡單地插入多行的值)。處理這些。
選擇 @ID_PERSONA = ID_PERSONA from inserted
毫無意義--inserted是一個表,那么如果插入了2行,inserted的ID_PERSONA包含什么值?你必須像對待其他表一樣對待inserted。
uj5u.com熱心網友回復:
除了你的觸發器代碼的各種問題之外,正如其他人所提到的,在表中使用SEQUENCE值的最簡單的方法就是把它放在一個DEFAULT約束中:
ALTER TABLE dbo. [table]
ADD CONSTRAINT DF_table_seq
DEFAULT (NEXT VALUE FOR dbo.SEQ_BIOINTEG)
FOR SECUENCIA;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/311097.html
標籤:
下一篇:替換XML路徑東西查詢
