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 函数:

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

·         作为表值函数的参数。

·         作为聚合函数的参数。

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

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

·         在使用 DISTINCT,UNION ,UNION ALL,EXCEPTINTERSECT 运算符的语句中。

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

最新文章

  1. CPU的内部架构和工作原理 (转,相当不错)
  2. ubuntu的一些常用命令,测试版本:Ubuntu 12.04.5 LTS
  3. relocation 错误
  4. 语义化HTML:ul、ol和dl
  5. Distance Between Points
  6. 《Java疯狂讲义》(第3版)学习笔记 1 - 如何学习Java
  7. LODOP打印插件
  8. JS 实现地区,省份,城市,县区4级联动
  9. 错误 4 自定义工具错误: 无法生成服务引用“DepartMentService”的代码。请检查其他错
  10. JDK中的插入排序
  11. Javascript面向对象编程(一):封装
  12. robotframework导入测试库使用方法
  13. Find K Closest Elements
  14. Windows nessus安装
  15. vs2015打开Dialog出现HRESULT:0x8CE0000B
  16. 在qt creator中使用imread并将图片显示到QLable中时没反应
  17. 用easy-ui中的表单操作实现一行操作和多行操作
  18. VUE CLI 3.0 安装及创建项目
  19. linux之用户和用户组
  20. .NET面试题系列(四)计算机硬件知识

热门文章

  1. 【转】搭建自己的 sentry 服务
  2. PAT1093: Count PAT's
  3. Linux时间子系统之(十六):clockevent
  4. Python Web(Django)与SQL SERVER的连接处理
  5. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)
  6. Python三元运算
  7. java集合之ArrayList,TreeSet和HashMap分析
  8. 【bzoj2331】[SCOI2011]地板
  9. BZOJ_3436_小K的农场_差分约束
  10. LOJ_6178_景区路线规划