【问题标题】:SQL Server 2016, Invalid object name 'STRING_SPLIT'SQL Server 2016,无效的对象名称“STRING_SPLIT”
【发布时间】:2018-04-22 16:22:16
【问题描述】:

在 SQL Server 2016 中,我使用 STRING_SPLIT 函数收到此错误

SELECT * FROM STRING_SPLIT('a,b,c',',')

错误:

对象名称“STRING_SPLIT”无效。

【问题讨论】:

  • 检查您运行它的数据库的兼容性级别。你可以把它设置得更低。
  • 确保数据库兼容级别为130。
  • 有一个big honking blue box in the documentation关于这个话题。
  • @JeroenMostert +1 使用“鸣喇叭”这个词 :)
  • 生命太短,无法阅读文档 :)

标签: sql sql-server tsql split


【解决方案1】:

确保数据库兼容级别为130

您可以使用以下查询来更改它:

ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 130

如 cmets 中所述,您可以使用以下命令检查数据库的当前兼容性级别:

SELECT compatibility_level FROM sys.databases WHERE name = 'Your-Database-Name';

【讨论】:

  • “简单,只要改变宇宙的引力常数”(权限被拒绝)
  • 如果我的 sql server justo 允许我使用 100,90 和 110 怎么办?
  • @E.Rawrdríguez.Ophanim 那么你不能使用STRING_SPLIT 函数。您可以构建自己的功能。检查此链接stackoverflow.com/questions/10914576/t-sql-split-string
  • 通过SELECT compatibility_level FROM sys.databases WHERE name = 'Your-Database-Name';检查您的数据库兼容性
  • 我的错误是在我的数据库名称周围添加单引号,例如['DatabaseName'],您将收到错误消息“用户无权更改数据库”。请记住不要添加单引号。正确方法:[DatabaseName] 即可设置兼容级别
【解决方案2】:

我用的是Split_string,感觉在英语语法上是正确的,但我的老眼睛看不出它应该是STRING_SPLIT ...所以,如果你像我一样有点精神上的挑战,那就检查一下您以正确的方式输入了命令! :)

【讨论】:

    【解决方案3】:

    如果您无法更改正在使用的数据库的 COMPATIBILITY_LEVEL,您可以尝试查看同一服务器上的其他数据库以找到具有更高 COMPATIBILITY_LEVEL 的数据库。我发现我的目标服务器上的“主”数据库的 COMPATIBILITY_LEVEL = 140,所以我连接到那个数据库,然后执行我的查询,它实际上是针对其他数据库中的(完全合格的)表运行的在 COMPATIBILITY_LEVEL 小于 130 的服务器上。它起作用了!只需使用

    查询服务器上的各种数据库
    SELECT compatibility_level  FROM sys.databases WHERE name = '<database_name>'; 
    

    找到 >= 130 的。

    【讨论】:

      【解决方案4】:

      您需要更改数据库的兼容级别。 为此,请尝试以下查询并将您的兼容性级别更改为 150。

      ALTER DATABASE [Database_Name] SET COMPATIBILITY_LEVEL = 150

      【讨论】:

      • SQL Server 2016 没有兼容级别 150。那里限制为 130,Yahfoufi 的回答是正确的
      猜你喜欢
      • 2018-08-08
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多