国产探花免费观看_亚洲丰满少妇自慰呻吟_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。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 醴陵市| 高唐县| 梓潼县| 会同县| 深泽县| 江达县| 潞城市| 神木县| 泗洪县| 资兴市| 古蔺县| 华容县| 南雄市| 平乡县| 甘谷县| 应用必备| 肃宁县| 从江县| 苏州市| 和林格尔县| 夏津县| 浏阳市| 武山县| 徐州市| 威信县| 新闻| 海盐县| 绥棱县| 阜南县| 赤峰市| 黄骅市| 崇文区| 巫山县| 平原县| 达孜县| 清水河县| 淳安县| 邯郸市| 丰原市| 大城县| 红河县|