SQL Server的Linked Server支持使用SEQUENCE嗎?

SQL Server的Linked Server支持使用SEQUENCE嗎?sql

 

SQL Server 2012開始支持序列(SEQUENCE),今天遇到有個同事諮詢,可否在LINKED SERVER裏面調用SEQENCE, 結果我測試發現不行,可是無論官方文檔也好,網上相關資料也罷,都沒有說支持,也沒有說不支持。數據庫

 

例如官方文檔NEXT VALUE FOR (Transact-SQL)中明確表示那些狀況不支持使用序列的NEXT VALUE FOR函數。(以下所示,沒有說起LINKED SERVER)服務器

 

不能在下列狀況下使用 NEXT VALUE FOR 函數:app

 

·         數據庫處於只讀模式時。函數

 

·         做爲表值函數的參數。測試

 

·         做爲聚合函數的參數。spa

 

·         在子查詢中,包括公用表表達式和派生表。code

 

·         在視圖、用戶定義的函數或計算列中。orm

 

·         在使用 DISTINCTUNION UNION ALLEXCEPTINTERSECT 運算符的語句中。server

 

·         在使用 ORDER BY 子句的語句中,除非使用了 NEXT VALUE FOR OVER (ORDER BY )

 

·         在如下子句中:FETCH,OVER,OUTPUT,ON,PIVOT,UNPIVOT,GROUP BY,HAVING,COMPUTE,COMPUTE BY  FOR XML

 

·         在使用 CASE,CHOOSE,COALESCE,IIF,ISNULLNULLIF 的條件表達式中。

 

·         在不屬於 INSERT 語句的 VALUES 子句中。

 

·         在檢查約束的定義中。

 

·         在規則或默認對象的定義中。 (它可用於默認約束。)

 

·         做爲用戶定義表類型中的默認值。

 

·         在使用 TOPOFFSET 的語句中,或在設置 ROWCOUNT 選項時。

 

·         在語句的 WHERE 子句中。

 

·          MERGE 語句中。 (在目標表的默認約束中使用 NEXT VALUE FOR 函數而且在 MERGE 語句的 CREATE 語句中使用默認值的狀況下例外。)

 

 

以下所示,這種寫法是不支持的(SSMS中執行會直接報錯),查了大量的資料,發現沒有什麼資料涉及這方面(固然,這種需求自己也是不合理的)。因此,通過驗證、測試,能夠明確的是: SQL ServerLinked Server不支持使用SEQUENCE

 

 

 
SELECT NEXT VALUE FOR [LINK_SERVER_NAME].YourSQLDba.dbo.TEST_SEQ;

 

 

 

簡單測試,發現可使用OPENQUERY來解決這個問題。以下所示:

 

 

SELECT   FROM OPENQUERY([LINK_SERVER_NAME], 'SELECT NEXT VALUE FOR YourSQLDba.dbo.TEST_SEQ');

 

 

另外,也能夠將序列放到存儲過程當中,經過鏈接服務器調用存儲過程,間接調用SEQUENCE。

 

 

CREATE PROCEDURE PRC_TEST
AS
BEGIN 
SELECT NEXT VALUE FOR dbo.TEST_SEQ;
END
 
 
EXEC [LINK_SERVER_NAME].YourSQLDba.[dbo].PRC_TEST

 

 

 

參考資料:

 

https://docs.microsoft.com/en-us/sql/t-sql/functions/next-value-for-transact-sql?view=sql-server-2017

相關文章
相關標籤/搜索