2016-03-11 86 views
1

有誰知道get_new_rowversion()@@ DBTS之間的區別是什麼?get_new_rowversion()和@@ DBTS之間有什麼區別

我找不到任何關於get_new_rowversion()的文檔,網上的一些文章說它是一個SQL Azure唯一函數。

我也嘗試在MSSQLLocalDB,SQL服務器和SQL Azure中運行它們。他們似乎返回相同的價值。

但我不確定它們是否具有同等功能。

回答

0

我沒有任何技術文檔或可靠的資源,但我會嘗試根據我對Azure的經驗回答這個問題。

@@DBTSget_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。

因此拇指規則是:

  1. 使用@@DBTS非SQL Azure的版本爲GET_NEW_ROWVERSION是沒有定義 。
  2. 對SQL Azure的使用GET_NEW_ROWVERSION因爲你不知道哪個 DB鏡可以服務於您的請求,如果我不使用任何SQL Azure的同步功能,你會從@@DBTS
+0

得到意想不到的值 (如副本),我可以假設用** @@ DBTS **替換** get_new_rowversion()**應該具有相同的行爲嗎? (我正在將SQL Azure遷移到MSLocalDB) –

+0

AFAI瞭解您計劃在IaaS場景中使用MS Local DB。然後@@ DBTS會爲你工作,也可以通過拇指規則#1 get_new_rowversion來解決。 – DhruvJoshi

+0

MSLocalDB用於功能測試。也許我應該說「重新創建」而不是「遷移」。無論如何,感謝您的回覆,這很有幫助! –

相關問題