3
我想下列要求定義在我的表中的列DEFAULT定義另一列:引用SQL Server 2005中
- 列應該插入的。如果該值在INSERT語句中提供,則應該插入它。
- 如果該列未在INSERT語句中引用,則應將其設置爲兩個其他列的總和。
由於第一個要求,我不能使用計算列,因爲它們不可插入。由於第二,我不能使用DEFAULT,因爲它不允許引用定義中的其他列。我還有什麼其他選擇?
順便說一句,該列應該是NOT NULL。
我想下列要求定義在我的表中的列DEFAULT定義另一列:引用SQL Server 2005中
由於第一個要求,我不能使用計算列,因爲它們不可插入。由於第二,我不能使用DEFAULT,因爲它不允許引用定義中的其他列。我還有什麼其他選擇?
順便說一句,該列應該是NOT NULL。
現在你去了,我用一個示例模式來演示這個,因爲你沒有提供真正的表/列名。
表:
CREATE TABLE test
(
id INT NOT NULL PRIMARY KEY IDENTITY, --made up key
col1 INT, --first column to add, wasn't sure if this was nullable or not
col2 INT, --second column to add, wasn't sure if this was nullable or not
col3 INT NOT NULL --this is the column to optionally insert into
)
這裏是觸發定義:
CREATE TRIGGER demo
ON test
INSTEAD OF INSERT
AS
INSERT INTO test (col1,col2,col3)
SELECT inserted.col1,
inserted.col2,
CASE
WHEN inserted.col3 IS NULL THEN COALESCE(inserted.col1, 0) + COALESCE(inserted.col2, 0)
ELSE inserted.col3
END
FROM inserted
基本上它取代上與一個觸發器中的表進行任何insert語句,所以我檢查使用inserted
臨時表來查看試圖插入到我們的不可爲空的可選列col3
中的值是否爲NULL。如果是,我將其替換爲col1
和col2
(因爲您沒有提及兩個源列是否可以爲空),所以我將它們替換爲零。
然後,您可以運行插入語句其中將它包含與否,儘管col3
不可爲空:
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
結果是:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
如果觸發是不存在,你可能會試圖運行第一個插入語句時出錯,告訴你它不能將NULL插入col3
。
另請注意,指定值的第二個插入語句未按要求由加法替換。
這是一個工作SQL Fiddle。
trigger ......... –
你能舉個例子嗎? – ercan