我在單桌, 但結束後一段時間內的查詢應用12Lac Insert命令,我如何才能找到最後 插入的記錄
一)表不創建日期列
b )由於主鍵值是手動生成的,因此無法應用子句順序排列。
c)Last()不是buss in mumql中的函數。
找到最後插入MS SQL SERVER
或者有什麼辦法找到最後執行的查詢
會有一些辦法,但無法弄清楚
表只包含主鍵約束沒有其他約束
我在單桌, 但結束後一段時間內的查詢應用12Lac Insert命令,我如何才能找到最後 插入的記錄
一)表不創建日期列
b )由於主鍵值是手動生成的,因此無法應用子句順序排列。
c)Last()不是buss in mumql中的函數。
找到最後插入MS SQL SERVER
或者有什麼辦法找到最後執行的查詢
會有一些辦法,但無法弄清楚
表只包含主鍵約束沒有其他約束
按這裏評論的請求一個快速而骯髒的手動解決方案,假設您已獲得與發佈的INSERT
s相同順序的INSERT
語句(或相應數據)列表。對於這個例子,我假設有100萬條記錄。
INSERT ... VALUES (1, ...)
...
INSERT ... VALUES (250000, ...)
...
INSERT ... VALUES (500000, ...)
...
INSERT ... VALUES (750000, ...)
...
INSERT ... VALUES (1000000, ...)
你只需要找到最後一個已插入的PK。幸運的是在這種情況下有一個。所以,你開始做表中的手動二進制搜索發佈
SELECT pk FROM myTable WHERE pk = 500000
如果你得到一個行回來了,你知道它有這麼遠。繼續檢查pk = 750000
。然後再次,如果它在那裏pk = 875000
。如果750000不存在,那麼INSERT
必須先停止。然後檢查pk = 675000
。這個過程在20個步驟後停止。
這只是普通的手動分而治之。
我做了這一個找到... :) –
如果它解決了您的問題,隨時接受答案。 – MicSim
有一種方法。 不幸的是,你必須提前做到這一點,所以它可以幫助你。 所以,如果你有任何機會的PRIMARY KEYS
你插入,仍然在手繼續前進,刪除具有這些鍵的所有行:
DELETE FROM tableName WHERE ID IN (id1, id2, ...., idn)
然後啓用Change Data Capture爲你的數據庫(已經選擇了DB):
EXEC sys.sp_cdc_enable_db;
現在,你還需要啓用變更數據捕獲該表,因爲我試過一個例子,我可以只運行:
EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', @source_name = N'tableName', @role_name = null
現在你幾乎已經安裝好了!您需要查看您的系統服務並驗證SQL Server Agent
正在運行您的DBMS,如果它不捕獲不會發生。現在
當你插入的東西進入你的表,你可以選擇一個新的表數據的變化稱爲[cdc].[dbo_tableName_CT]
:
SELECT [__$start_lsn]
,[__$end_lsn]
,[__$seqval]
,[__$operation]
,[__$update_mask]
,[ID]
,[Value]
FROM [cdc].[dbo_tableName_CT]
GO
這樣的一個例子輸出結果如下:
你可以order by __$seqval
,應該給你的行的插入順序。
注:此功能似乎並沒有出現在SQL Server Express
有什麼好理由,每個表中標識列! –
是您的主要關鍵身份專欄? (即id自動生成) – DrCopyPaste
'從桌面順序選擇頂部1 *通過identiy_column desc' –