STRING_AGG WITHIN GROUP和Visual Studio的问题

时间:2017-04-25 12:44:08

标签: sql-server visual-studio-2015 azure-sql-database

我正在使用Visual Studio 2015,并且在我的SQL Server数据库项目中出现了STRING_AGG WITHIN GROUP的问题。

SELECT [Continent], 
STRING_AGG([Country], ', ') WITHIN GROUP (ORDER BY [Country]) AS CountryList
FROM [Country]
GROUP BY [Continent]

此代码在AS附近发出错误SQL46010:语法错误。 没有

WITHIN GROUP (ORDER BY [Country])

没有问题。

目标平台设置为

Microsoft Azure SQL Database V12

调试目标连接设置为本地SQL Server vNext数据库。

在SQL Server Management Studio中,这段代码执行没有任何问题。在SSMS中或从代码中运行存储过程可以得到预期的正确结果(每个大洲1行,每个大陆的国家/地区列表以国家/地区的逗号分隔)。

与此同时,我安装了Visual Studio 2017,希望这可以消除错误,但没有运气。

安装了SQL Server数据工具17(版本14.0.61704.140)。

3 个答案:

答案 0 :(得分:3)

我遇到了类似的问题,并怀疑这可能是兼容性问题,如下所示。我还没有意识到,每个SQL Server数据库都有自己的COMPATIBILITY_LEVEL,这会影响该数据库的工作方式。 https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level?view=sql-server-2017 解释了如何查询和更改此数据库属性。

从sys.database中选择名称,COMPATIBILITY_LEVEL; 显示我的数据库的COMPATIBILITY_LEVEL为100(即与SQL Server 2008兼容)。

正在运行 修改数据库 SET COMPATIBILITY_LEVEL = 110 (或120或130),因此它现在与SQL Server 2012+兼容,包含STRING_AGG函数的WITHIN GROUP子句的查询开始工作。

答案 1 :(得分:0)

问题

当我尝试在Visual Studio 2017中构建数据库项目时,出现类似以下错误:

“')'附近的语法错误”。使用STRING_AGG()子句时,这在我执行WITHIN GROUP()之后出现。

解决方案

我通过在Visual Studio的“ Project->” Properties“ 下更改目标平台来解决此问题。

将其更改为SQL Server 2017,现在我的数据库项目的构建没有错误。似乎Visual Studio 2017的默认目标平台是SQL Server 2016。

答案 2 :(得分:0)

关于兼容性级别要注意的另一件事,如果您的数据库处于比 SQL 安装更早的兼容性级别并且您不想更改它,您可以从 master 运行查询并使用完全限定的路径到您要查询的数据库表,它将使用主数据库的兼容级别(即,无论 SQL 安装版本是什么)。

例如:

变化:

USE MyDB
GO
SELECT STRING_AGG(MyNames, ',') FROM dbo.MyTable 

致:

USE Master
GO
SELECT STRING_AGG(MyNames, ',') FROM MyDB.dbo.MyTable