2017-07-24 28 views
0

enter image description here如何鎖定在SQL

的Insert命令多個表這是我的表結構

當我將數據插入到第一個表,它會在表2 我使用的代碼 多個條目要獲取ID

Select MAX(ID)+1 From Table1 

插入數據

Insert Into Table1 Values('1','abc','add1'); 
    Insert into table2 values('1','med','english'); 
    Insert into table2 values('1','eng','english'); 

代碼對於單個計算機正常工作,但是當我們在多個終端中使用應用程序時,它將插入錯誤的數據,即表2中另一個id的數據

+1

不使用'MAX(ID)+ 1'而不是它使用'identity(1,1)'在表 –

+0

上我的問題不是第一個表與第二個表在lan數據中使用的應用程序與另一個表混合時條目 – Rohan

回答

3

您需要確保table1的ID列是標識列,以下內容:

DECLARE @ID INT 

INSERT table1 ([columns]) 
VALUES (...) 

SELECT @ID = SCOPE_IDENTITY() 

INSERT table2 (table1ID, [columns]) 
VALUES (@ID, ...) 

你可以閱讀更多關於SCOPE_IDENTITY()here

MAX(ID)將包括由其他進程創建的ID值,這就是爲什麼你的第二插入件被混合起來的數據。

+0

如果從相同範圍調用SCOPE_IDENTITY(),則這將起作用。如果不是@@ IDENTITY應該使用。 –

+0

您需要注意@@ IDENTITY,因爲觸發器插入的值可能會干擾其值。 –