按照您的請求使用INSTEAD觸發這個SQL代碼可以讓你開始。
CREATE TABLE dbo.SampleTable
(
ID INT,
SomeOtherValue VARCHAR(100) NULL
)
GO
CREATE TRIGGER dbo.TR_SampleTable_Insert
ON dbo.SampleTable
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
-- Inserting rows with IDs
INSERT INTO dbo.SampleTable (
ID,
SomeOtherValue)
SELECT
ID,
SomeOtherValue
FROM
Inserted
WHERE
ID IS NOT NULL
-- Now inserting rows without IDs
INSERT INTO dbo.SampleTable (
ID,
SomeOtherValue)
SELECT
(SELECT ISNULL(MAX(ID), 0) FROM dbo.SampleTable)
+ ROW_NUMBER() OVER(ORDER BY ID DESC),
SomeOtherValue
FROM
Inserted
WHERE
ID IS NULL
END
GO
INSERT INTO dbo.SampleTable
SELECT 1, 'First record with id'
UNION
SELECT NULL, 'First record without id'
UNION
SELECT 2, 'Second record with id'
UNION
SELECT NULL, 'Second record without id'
GO
SELECT * FROM dbo.SampleTable
GO
我完全同意以前的意見,不推薦將舊ID與新ID混合。 – JCallico 2010-07-14 16:14:26
謝謝 - 只是我正在尋找的那種例子:-) 關於ID的混合,我看到了不足之處 - 但是這個項目也給這個方法帶來了一些缺點,與這個技術問題無關。 – 2010-07-15 07:26:01
很高興我能夠幫助。這就是爲什麼我實現了你原來所要求的,而不是立即建議一種替代方法,只是爲了跳躍才能獲得積分。這些日子似乎是StackOverflow的趨勢。 – JCallico 2010-07-15 17:10:53