我目前在C#中工作,我需要將新記錄插入到一個表中,獲取新的主鍵值,然後將其用作外鍵引用以插入多個記錄。數據庫是MS SQL Server 2003.所有幫助表示讚賞!從MS SQL Server獲取自動編號主鍵
4
A
回答
8
獲取插入行身份的方法是使用SCOPE_IDENTITY()
函數。如果你正在使用存儲過程,那麼這將看起來像下面這樣將行標識作爲輸出參數返回。
CREATE PROCEDURE dbo.MyProcedure
(
@RowId INT = NULL OUTPUT
)
AS
INSERT INTO MyTable
(
Column1
,Column2
,...
)
VALUES
(
@Param1
,@Param2
,...
);
SET @RowId = SCOPE_IDENTITY();
然後可以使用該值對於任何後續的插入物(可選地,如果可以通過所有數據到存儲過程,則可以在過程體的其餘部分使用它)。
如果你傳遞的SQL在動態然後使用幾乎相同的技術,但單一的字符串分隔符的語句(也;
在SQL),例如:
var sql = "INSERT INTO MyTable (Column1, Column2, ...) VALUES (@P1, @P2, ...);" +
"SELECT SCOPE_IDENTITY();";
然後,如果你執行這個使用ExecuteScalar
,您將能夠將標識返回爲標量結果並將其轉換爲正確的類型。或者,您可以一次構建整批產品,例如
var sql = "DECLARE @RowId INT;" +
"INSERT INTO MyTable (Column1, Column2, ...) VALUES (@P1, @P2, ...);" +
"SET @RowId = SCOPE_IDENTITY();" +
"INSERT INTO MyOtherTable (Column1, ...) VALUES (@P3, @P4, ...);";
這可能不是正好正確的語法,你可能需要在開始使用SET NOCOUNT ON;
(我心裏很生疏,因爲我很少使用動態SQL),但它應該讓你在正確的軌道上。
+0
我更喜歡這種方法(使用OUT參數)而不是返回數據集。尤其適用於自動生成的代碼。 – 2008-11-25 00:32:35
4
這樣做的最好方法是在TSQL中使用SCOPE_IDENTITY()函數。這應該作爲插入的一部分來執行,即
SqlCommand cmd = new SqlCommand(@"
INSERT INTO T (Name) VALUES(@Name)
SELECT SCOPE_IDENTITY() As TheId", conn);
cmd.AddParameter("@Name", SqlDbType.VarChar, 50).Value = "Test";
int tId = (int)cmd.ExecuteScalar();
或者,也可以分配SCOPE_IDENTITY()以在相繼的語句中使用的變量。例如
DECLARE @T1 int
INSERT INTO T (Name) VALUES('Test')
SELECT @T1 = SCOPE_IDENTITY()
INSERT INTO T2 (Name, TId) VALUES('Test', @T1)
3
如果你只是使用SQL,然後檢查鄧肯的答案。但是,如果您使用的是LINQ,那麼您可以創建該實體,將其保存到數據庫,並且ID參數將自動填充。
給定用戶實體和用戶表,可能是這樣的:
using(var db = new DataContext()) {
var user = new User { Name = "Jhon" };
db.Users.InsertOnSubmit(user);
db.SubmitChanges();
/* At this point the user.ID field will have the primary key from the database */
}
相關問題
- 1. MS SQL Server 2012的自動遞增和主/外鍵
- 2. 如何提取MS SQL Server表的主鍵列的名稱?
- 3. 如何在Ms Access中插入後獲取自動編號?
- 4. 自動從MS Excel導出到MS SQL Server
- 5. SQL Server主鍵/外鍵
- 6. SQL Server查看主鍵
- 7. 從按鍵獲取編號爲Int
- 8. 編碼從pyodbc到MS SQL Server的
- 9. MS SQL SERVER 2014:獲取紀錄
- 10. SQL java獲取值分配給自動增量主鍵
- 11. MS SQL Server 2008編碼
- 12. 導入時的MS Access自動編號
- 13. MS Access 2007 - 半自動編號
- 14. MS Access自動編號問題
- 15. MS CRM 2015/2016自動編號
- 16. 從sql server中動態獲取數據
- 17. 從MS SQL Server移動到開源RDBMS
- 18. 從SQL Server語句確定主鍵
- 19. SQL Server 2012主鍵自動增量跳過10.000
- 20. 從插入獲取主鍵
- 21. 從dbSet獲取主鍵列
- 22. 定期重新啓動自動編號的SQL Server
- 23. SQL Server從表中選擇主鍵包含多列的主鍵
- 24. 請告訴我如何在SQL Server,獲取主鍵名2005
- 25. 在SQL Server CE和C#中獲取新插入行的主鍵?
- 26. SQL Server將自動增加主鍵添加到現有表
- 27. SQL Server中自動增量主鍵的上限
- 28. SQL Server數據庫中的主鍵自動增量
- 29. 從sql中的多個xml行中獲取值(ms server 2005)
- 30. 從SQL Server獲取數據到MS Access數據庫
你使用像LINQ的框架或您使用的SQL字符串查詢? (在我的回答中,我假設LINQ) – Yona 2008-11-25 00:34:12