我有一个场景,其中目标表的一列需要自动递增。我没有在此列上启用身份。因此,每次插入完成时,我都需要选择最后一个数字并将其加 1。
http://sqlfiddle.com/#!6/61eb4/5
小提琴链接中给出了类似的场景。我不想插入 ProductChanges 表的 productid。相反,我需要选择最后一个 id,并且我需要为每个新行递增和插入它
我有一个场景,其中目标表的一列需要自动递增。我没有在此列上启用身份。因此,每次插入完成时,我都需要选择最后一个数字并将其加 1。
http://sqlfiddle.com/#!6/61eb4/5
小提琴链接中给出了类似的场景。我不想插入 ProductChanges 表的 productid。相反,我需要选择最后一个 id,并且我需要为每个新行递增和插入它
让这个工作的代码
DECLARE @intctr int
SELECT @intctr = MAX(productid)+1 from products
DECLARE @strQry varchar(200)
SET @strQry =
'CREATE SEQUENCE dbo.seq_key_prd
START WITH ' +convert( varchar(12),@intctr) +' INCREMENT BY 1 ;'
print @strQry
exec( @strQry)
alter table Products
add default next value for seq_key_prd
for ProductId;
GO
--Merge statement for data sync
MERGE Products USING ProductChanges ON (Products.Productid = ProductChanges.Productid)
WHEN MATCHED AND Products.VendorlD =0 THEN DELETE
WHEN NOT MATCHED by target then insert (productid,Productname,VendorlD)
values(default,productname,VendorlD)
WHEN MATCHED THEN UPDATE SET
Products.ProductName = ProductChanges.ProductName ,
Products.VendorlD = ProductChanges.VendorlD;
1)创建序列并设置为目标表。
例子
CREATE SEQUENCE table_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
2)为该序列创建触发器,设置表
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT
ON myTable
FOR EACH ROW
WHEN (new.id is null)
DECLARE
v_id qname.qname_id%TYPE;
BEGIN
SELECT table_seq.nextval INTO v_id FROM DUAL;
:new.qname_id := v_id;
END my_trigger;