zoukankan      html  css  js  c++  java
  • SQL Server的Linked Server支持使用SEQUENCE吗?

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

     

    SQL Server 2012开始支持序列(SEQUENCE),今天遇到有个同事咨询,能否在LINKED SERVER里面调用SEQENCE, 结果我测试发现不行,但是不管官方文档也好,网上相关资料也罢,都没有说支持,也没有说不支持。

     

    例如官方文档NEXT VALUE FOR (Transact-SQL)中明确表示那些情况不支持使用序列的NEXT VALUE FOR函数。(如下所示,没有提及LINKED SERVER)

     

    不能在下列情况下使用 NEXT VALUE FOR 函数:

     

    ·         数据库处于只读模式时。

     

    ·         作为表值函数的参数。

     

    ·         作为聚合函数的参数。

     

    ·         在子查询中,包括公用表表达式和派生表。

     

    ·         在视图、用户定义的函数或计算列中。

     

    ·         在使用 DISTINCTUNION UNION ALLEXCEPTINTERSECT 运算符的语句中。

     

    ·         在使用 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

  • 相关阅读:
    破周三,前不着村后不着店的,只好学pandas了,你该这么学,No.9
    周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8
    大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7
    链接
    音乐
    术语
    新闻
    我的文章分类
    我的代码规则
    Jenkins 访问特别慢,且不消耗服务器资源
  • 原文地址:https://www.cnblogs.com/kerrycode/p/10690312.html
Copyright © 2011-2022 走看看