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

时间:2016-06-03 14:20:08

标签: azure-sql-database

新的STRING_SPLIT method在我的Azure SQL数据库中不可用。我几天前已经运行ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 130,我已经验证兼容级别确实设置为130. SELECT database_id, name, compatibility_level FROM sys.databases

是否有其他人能够使用新方法,如果是,您是否还需要做其他任何事情才能使其正常工作?

3 个答案:

答案 0 :(得分:38)

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

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

答案 1 :(得分:13)

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

ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 130

请注意,即使在新的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

答案 2 :(得分:7)

string_split函数必须放在FROM子句之后。要么作为表值(如OP的回答),要么 OR 使用以下命令将列中的每个字符串都用","分隔(贷记@padigan的注释):

select * 
from infoTable
cross apply string_split(infoTable.myStrings, ',') 

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