1. 程式人生 > 其它 >【SQL Server】獲取表格插入的id(二)——newID()

【SQL Server】獲取表格插入的id(二)——newID()

現在有一個需求,插入api呼叫日誌表。然後,發起HTTP請求()請求時,需要帶入日誌表的id)。

簡化無關的新增,SQL Server表格設計如下:

CREATE TABLE mylog (
    id INT IDENTITY(1,1) PRIMARY KEY,            -- 自增的主鍵
    url NVARCHAR(255),                            -- 發起的路徑和其他欄位
    flag INT DEFAULT 0,                            -- 執行狀態
    fguid NVARCHAR(36)                            --
唯一編碼 )

原本為用 @@IDENTITY 獲取最近插入的記錄,然後再發起請求,也沒毛病。

INSERT INTO dbo.mylog
        ( url, flag )
VALUES  ( N'請求的路徑', -- url - nvarchar(255)
          0 -- flag - int
          )
DECLARE @id INT = @@IDENTITY        -- 獲取插入的ID
SELECT @id 
-- 根據新增id,執行下一步

 獲取到了最近新增的日誌記錄的id。

於是,好些地方都呼叫這個方法。直到有一天,主管經過。看來我的程式碼。

主管:“如果在在執行這句話的過程中,其他地方也插入了記錄。會怎麼樣?”

我回想了一下。我還以為它只是我本地的資料庫,獨屬於我的一對一。我沒想到他已經走向社會,需要應對繁雜的事務,切換著滿足這麼多人的需求。我是不是要給他加一個回滾的事務?

……

主管:“這個表,我就是為了解決唯一性的問題,加了一個欄位——fguid”。

SQL  SERVER 有一個方法會隨機生成唯一識別符號——newID() 。我們可以根據唯一查關鍵字。

DECLARE @fguid NVARCHAR(36) = LOWER(NEWID())
INSERT INTO dbo.mylog
        ( url, flag, fguid )
VALUES ( N'', -- url - nvarchar(255) 0, -- flag - int @fguid -- fguid - nvarchar(255) ) DECLARE @id INT -- 獲取插入的ID SELECT @id = id FROM dbo.mylog WHERE fguid = @fguid SELECT @id -- 根據新增id,執行下一步

我:原來如此。學習了,學習了!謝謝。。不過,為什麼要加 LOWER() ?

主管: 小寫的看著比較舒服。