国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

insert后獲得自動插入的id

2024-07-21 02:52:23
字體:
來源:轉載
供稿:網友

    在寫CRUD的時候,對于有自動增長列的表(Id自增),我們在insert 以后想要得到自動增長的id,該怎么做?

   由于insert的時候,Id是在數據庫自動增長的,所以我們沒法獲得反饋回來的Id,而如果通過insert后,再select一次又浪費時間,這個時候我們應該怎么做呢?

    可以使用output inserted.Id

假設表結構如下:create table Stu(  id int identity,  Varchar name)

//獲得新增行的自動增長列的語句

insert into Stu(name)  output  inserted.id  values ('小明‘)

執行該語句后返回insert后的自增Id

output 是sql server2005的新特性,可以從數據修改語句中返回輸出,可以看作是“返回結果的DML”2005之后 Insert,Delete,Update語句 均支持Output語句,在Output語句中可以引用inserted和deleted。使用方法同觸發器類似。使用該方法最大弊端就是需要指定主鍵。output Inserted.要返回的值。

另:在遇到該問題的時候,也查閱到@@IDENTITY 和SCOPE_IDENTITY()也可以獲取自增的Id字段。

例:

insert intoStu (name)  values ('小明‘)select @@IDENTITY

用select @@identity得到上一次插入記錄時自動產生的ID

但需要注意的是:@@IDENTITY 它總是獲取最后一條變更數據的自增字段的值,而忽略了進行變更操作所在的范圍約束。(作用全局范圍內)

有什么影響?比如:我在主數據表A上定義一個Insert觸發器,但A表Insert一條數據時,同時在記錄表B中Insert一條數據,這時我使用select @@identity返回的就是B中的自增Id了。但我要的是A的Id,這時就出現問題了。(因為@@IDENTITY是取全局操作的最后一步操作所產生的自增域的值)

而使用SCOPE_IDENTITY()也是得到最后一條自增域的值,但是它是僅限在一個操作范圍之內,即上例獲取的就是A表這個范圍內的Id。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乃东县| 当雄县| 讷河市| 洛扎县| 平罗县| 罗定市| 江孜县| 准格尔旗| 镇原县| 永年县| 汝城县| 芜湖市| 措勤县| 独山县| 金沙县| 浦县| 白玉县| 丰台区| 巴南区| 吉首市| 景泰县| 海城市| 徐汇区| 台东市| 沙湾县| 顺平县| 嘉义县| 鞍山市| 察雅县| 宜宾市| 华亭县| 沙坪坝区| 和林格尔县| 南京市| 旬邑县| 朝阳市| 栾城县| 蕉岭县| 纳雍县| 江门市| 沧源|