我有一個場景,其中一列目標表需要自動增加。本專欄沒有啓用身份驗證。所以我需要選擇最後一個數字並在其中添加1,每次插入完成。使用MERGE進行增量插入
http://sqlfiddle.com/#!6/61eb4/5
類似的情況在撥弄鏈接給出。我不希望插入ProductChanges表的productid。相反,我需要選擇最後一個ID,我需要它爲每個新行增加和插入
我有一個場景,其中一列目標表需要自動增加。本專欄沒有啓用身份驗證。所以我需要選擇最後一個數字並在其中添加1,每次插入完成。使用MERGE進行增量插入
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;
所以你不在2008年。 –
我在sql server 2012上 – mhn
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;
這不是合併的具體。此外,此特殊身份驗證方案將一次限制對此表的一個插入事務的併發性。根本沒有併發。 – usr
採取一些提示,並在表上實施適當的觸發器,我已經解釋了我早期堆棧答案中的simillar情況.http://stackoverflow.com/questions/18891796/create-sequence-in-ms-sql-server-2008/ 18957485#18957485 – Pratik
是的..看起來像而不是觸發器應該工作正常。將嘗試 – mhn