有誰知道get_new_rowversion()和@@ DBTS之間的區別是什麼?get_new_rowversion()和@@ DBTS之間有什麼區別
我找不到任何關於get_new_rowversion()
的文檔,網上的一些文章說它是一個SQL Azure唯一函數。
我也嘗試在MSSQLLocalDB,SQL服務器和SQL Azure中運行它們。他們似乎返回相同的價值。
但我不確定它們是否具有同等功能。
有誰知道get_new_rowversion()和@@ DBTS之間的區別是什麼?get_new_rowversion()和@@ DBTS之間有什麼區別
我找不到任何關於get_new_rowversion()
的文檔,網上的一些文章說它是一個SQL Azure唯一函數。
我也嘗試在MSSQLLocalDB,SQL服務器和SQL Azure中運行它們。他們似乎返回相同的價值。
但我不確定它們是否具有同等功能。
我沒有任何技術文檔或可靠的資源,但我會嘗試根據我對Azure的經驗回答這個問題。
@@DBTS
和get_new_rowversion()
預計會返回相同的結果,但在不同的環境中使用。
對於初學者,我建議@@DBTS
的MSDN參考,以更好地理解它。當你在它請注意這是一個事務中的行爲和比較MIN_ACTIVE_ROWVERSION()
引述MSDN @@ DBTS /對比度它
返回當前數據庫當前時間戳數據類型的值。此時間戳記保證爲在數據庫中是唯一的。
請注意word 當前數據庫。因此,如果您在數據庫上進行了鏡像,並且有2個鏡像和一個主數據庫,則對於每個數據庫,您都希望有三個不同的值用於@@DBTS
。
當你使用鏡像時,你必須小心使用@@ DBTS。
get_new_rowversion()
是返回從在SQL Azure中當前DB中rowversion的功能。
這只是在SQL Azure中可用,也不會別的地方工作。
你會得到像
消息未能找到存儲過程 'GET_NEW_ROWVERSION'。
在其他版本。
它的原因的存在是因爲SQLAzure幕後,同步框架可保持DB(鏡像)的多個副本,確保在主服務器發生故障的情況下,從鏡子的快速響應。由於兩個不同的DB在時間上可能有不同的計數器,因此rowversion
的值將會不同。
然後,無需用戶/它知道用戶/ TSQL是處理輔助數據庫還是主數據庫實例,SQL Azure就會以正確的值爲rowversion
返回用戶/ TSQL。
因此拇指規則是:
@@DBTS
非SQL Azure的版本爲GET_NEW_ROWVERSION
是沒有定義 。GET_NEW_ROWVERSION
因爲你不知道哪個 DB鏡可以服務於您的請求,如果我不使用任何SQL Azure的同步功能,你會從@@DBTS
得到意想不到的值 (如副本),我可以假設用** @@ DBTS **替換** get_new_rowversion()**應該具有相同的行爲嗎? (我正在將SQL Azure遷移到MSLocalDB) –
AFAI瞭解您計劃在IaaS場景中使用MS Local DB。然後@@ DBTS會爲你工作,也可以通過拇指規則#1 get_new_rowversion來解決。 – DhruvJoshi
MSLocalDB用於功能測試。也許我應該說「重新創建」而不是「遷移」。無論如何,感謝您的回覆,這很有幫助! –