有一個表,其主鍵是int並且為自動成長的。當我向這個表中插入一項並且不提供主鍵的時候,資料庫會自動添加一個唯一的主鍵。
問題是:
怎麼得到剛剛插入的那一項的主索引值?
1、
預存程序有兩種方式傳回值:
第一:通過output 參數
第二:通過return來實現
而在你的預存程序已經聲明了一個output參數,只要你在你的預存程序已經給這個值賦值了,它就能返回回去.
建議一般用output參數,因為它可以返回多個,而return只能是一個,return一般用來返回:影響的行數,錯誤編碼等
2、
為避免多使用者操作資料庫取值不正確
正確應該要這樣取:
SELECT * FROM table WHERE (AutoIncreaseColumn = SCOPE_IDENTITY())
3、
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它們都返回插入到 IDENTITY 列中的值。
IDENT_CURRENT 返回為任何會話和任何範圍中的特定表最後產生的標識值。IDENT_CURRENT 不受範圍和會話的限制,而受限於指定的表。IDENT_CURRENT 返回為任何會話和範圍中的特定表所產生的值。
@@IDENTITY 返回為當前會話的所有範圍中的任何錶最後產生的標識值。
SCOPE_IDENTITY 返回為當前會話和當前範圍中的任何錶最後產生的標識值
SCOPE_IDENTITY 和 @@IDENTITY 返回在當前會話中的任何錶內所產生的最後一個標識值。但是,SCOPE_IDENTITY 只返回插入到當前範圍中的值;@@IDENTITY 不受限於特定的範圍。
IDENT_CURRENT() 始終返回指定表最後插入的標識值
@@IDENTITY 返回當前會話的標識值,無論是否在同一個範圍,在測試1、2中,可以看到它返回的是觸發器中插入記錄的標識值,而在測試3中,因為當前會話無插入記錄,所以返回NULL
SCOPE_IDENTITY() 返回當前會話同一範圍的標識值,所以在測試1、2中,它返回的值不受觸發器的影響,而在測試3中,因為當前會話無插入記錄,所以返回NULL
4、
插入之後馬上 select @@identity from youetable 即可
如果是預存程序可以把@@identity作為插入之後的傳回值
5、
在查詢分析器中擷取預存程序中的return的值
declare @return_value int
set @return_value = 1
exec EXT_SUBJECTINSERT_11
"2006","艱難", "高中",
"語文","問答","知識點","第一期","dd","2006-9-11 8:32:54","重文",
"insert",1,1,
"search","dd","fir",@return_value output
select @return_value
6、
DECLARE @tmpCount int
SET @tmpCount int = (SELECT COUNT(*) FROM 表名 WHERE 你要進行搜尋的條件)
IF (@tmpCount = 0)
BEGIN
INSERT 操作
RETURN 1
END
ELSE
BEGIN
RETURN 0
END
預存程序來作,預存程序的寫法可以參照上面給出的,但是在程式調用的話就需要使用sqlparameter了,關於它的使用方法,可以在網上找到一堆
然後執行sqlcommand,如果僅僅在程式定義了一個傳回值參數(returnvalue)那麼執行完(excutenoquery)可以由這個參數來判斷,如果在資料庫和程式中定義了一個傳回值參數(output),那麼執行完後也可以由這個參數的值進行判斷
7、
用int returnValue = Convert.ToInt32(command.ExecuteScalar());執行sql語句,取得傳回值
8、
cmd.Parameters["return_value"].Direction=ParameterDirection.ReturnValue;
本文為轉載