'STRING_SPLIT'不是公认的内置函数名称

Gon*_*ers 24 azure-sql-database

我的Azure SQL数据库中没有新STRING_SPLIT 方法.我ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 130几天前已经跑了,我已经验证兼容级别确实设置为130.SELECT database_id, name, compatibility_level FROM sys.databases

有没有其他人能够使用新方法,如果是这样,你还需要做任何其他工作吗?

Gon*_*ers 49

这是一个语法错误.我试图将该函数用作标量而不是表值.

正确的语法: SELECT Value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');

  • @ThinkCode你需要使用'APPLY',例如有点像这样的东西`SELECT t.SomeColumn,s.value FROM dbo.MyTable t CROSS APPLY STRING_SPLIT(t.SomeColumn,',')s` (5认同)
  • 我怎么会在我的一个列中拆分字符串呢?这是使用的地方,而不是索引它并操纵字符串. (3认同)

Nil*_*rma 14

STRING_SPLIT功能在兼容级别130或更高级别可用.如果您的数据库兼容级别低于130,SQL Server将无法找到并执行STRING_SPLIT函数.您可以使用以下命令更改数据库的兼容级别:

ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 130
Run Code Online (Sandbox Code Playgroud)

请注意,即使在新的Azure SQL数据库中,兼容级别120也可能是默认的.

以供参考:

版本 - 最高兼容级别 - 最低可用级别

  • SQL 2017 - 140 - 100
  • SQL 2016 - 130 - 100
  • SQL 2014 - 120 - 100
  • SQL 2012 - 110 - 90
  • SQL 2008 - 100 - 80
  • SQL 2005 - 90 - 80
  • SQL 2000 - 80 - 80


joh*_*ger 9

函数string_split必须放在FROM子句之后。作为表值(如OP的答案)使用以下内容来分割列中的每个字符串","(归功于@padigan的评论):

select * 
from infoTable
cross apply string_split(infoTable.myStrings, ',') 
Run Code Online (Sandbox Code Playgroud)

我不确定如何命名结果列,它采用默认名称value