在sql語句後使用
SCOPE_IDENTITY()
當然您也可以使用 SELECT @@IDENTITY
但是使用 SELECT @@IDENTITY是去全局最新. 有可能取得值不正確.
示例:
復制代碼 代碼如下:
insert into dbo.SNS_BlogData(userName) values('jiangyun') ;
SELECT SCOPE_IDENTITY()
獲取SQL-SERVER數據庫insert into操作的主鍵返回值,SCOPE_IDENTITY
插入一條記錄後想要立刻獲取其數據表中的主鍵返回值。這個主鍵是自動生成的,其實實現的方式有很多,比如再進行一次查詢,獲取出來。或者在插入數據之前取 出最大值,在最大值上面加一等等,方法很多,但是有些很不方便。
個人感覺最快的方式就是,在插入數據後直接獲取主鍵的值,然後返回過來。
方法如下:
sql語句如下:
INSERT INTO tableName (fieldname ...) values (value ...) SELECT @@IDENTITY AS returnName;
在sql語句中加入SELECT @@IDENTITY AS returnName;用來獲取主鍵的值
在程序中 獲取返回值:
復制代碼 代碼如下:
public int sqlexecutereader(string sql)
{
DBopen();
SqlCommand myComm = new SqlCommand(sql, Connection);
int newID = Convert.ToInt32(myComm.ExecuteScalar());
DBclose();
return newID;
}
當然在此處主鍵是int類型的自動增加的。DBopen();DBclose();的操作在此就 不多說了。
select SCOPE_IDENTITY()
返回上面操作的數據表最後row的IDENTITY 列的值;
返回插入到同一作用域中的 IDENTITY 列內的最後一個 IDENTITY 值。一個作用域就是一個模塊——存儲過程、觸發器、函數或批處理。因此,如果兩個語句處於同一個存儲過程、函數或批處理中,則它們位於相同的作用域中。
SELECT @@IDENTITY
返回上面操作最後一個數據表的最後row的IDENTITY 列的值;
創建表:
create table T_User(F_ID int identity(1,1) not null,F_Name varchar(20) not null)
插入數據:
insert into T_User(F_Name) values('我是誰') Select SCOPE_IDENTITY()
存儲過程:
CREATE PROCEDURE [dbo].[sp_User](@F_Name int) AS
begin tran Insertinto_T_User
Insert into dbo.T_User(F_Name) values(@F_Name)
Select SCOPE_IDENTITY()