首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 OUTPUT 子句:輕鬆取得剛插入的識別值

     編輯:關於SqlServer

痛點

舊作法:SELECT TOP 1 id FROM table ORDER BY id DESC,併發下極不可靠;加鎖又傷效能。

OUTPUT 子句解決方案

SQL Server 2005 引入 OUTPUT 子句,可在 INSERT、UPDATE、DELETE 陳述式中直接回傳受影響列的值(含識別欄)。

範例

-- 建立測試表
CREATE TABLE [soloreztest] (
    [id] INT IDENTITY(1,1) NOT NULL,
    [name] NVARCHAR(50) NULL
);

-- 插入並回傳新 id
INSERT INTO [soloreztest] ([name])
OUTPUT INSERTED.id
VALUES ('solorez');
-- 結果:
-- id
-- ----
-- 5
-- (1 row affected)

-- 驗證
SELECT * FROM [soloreztest];
-- id  name
-- 1   solorez
-- 2   solorez
-- 3   solorez
-- 4   solorez
-- 5   solorez

優點

  • 原子性:插入與取回識別值在同一陳述式完成,零併發風險。
  • 效能:無額外查詢、無鎖定開銷。
  • 彈性:OUTPUT INSERTED.* 可回傳所有欄位;DELETED 用於 UPDATE/DELETE 取得舊值。

強烈建議取代舊有 @@IDENTITY、SCOPE_IDENTITY()、IDENT_CURRENT() 等易出錯的方法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved