34,576
社区成员
发帖
与我相关
我的任务
分享
SET NOCOUNT ON;
USE temp;
GO
IF OBJECT_ID('dbo.T1') IS NOT NULL
DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
keycol INT NOT NULL PRIMARY KEY,
datacol VARCHAR(10) NOT NULL
);
IF OBJECT_ID('dbo.Sequence') IS NOT NULL
DROP TABLE dbo.Sequence;
GO
CREATE TABLE dbo.Sequence(val INT NOT NULL);
INSERT INTO dbo.Sequence VALUES(0);
--创建触发器
CREATE TRIGGER trg_T1_ioi_assign_key ON dbo.T1 INSTEAD OF INSERT
AS
DECLARE @rc AS INT, @key AS INT;
SET @rc = @@rowcount;
IF @rc = 0 RETURN; -- if 0 affected rows, exit
-- Update sequence
UPDATE dbo.Sequence SET @key = val, val = val + @rc;
INSERT INTO dbo.T1(keycol, datacol)
SELECT @key + ROW_NUMBER() OVER(ORDER BY const), datacol
FROM (SELECT 1 AS const, datacol FROM inserted) AS I;
GO