gpt4 book ai didi

sql-server - 兼容模式允许新命令?

转载 作者:行者123 更新时间:2023-12-03 16:29:54 24 4
gpt4 key购买 nike

我有一个 SQL Server 2017 服务器以 2012 兼容模式运行数据库。但是,当我尝试使用 2017 年新的 T-SQL 命令 string_agg() 时,它起作用了。我预计会出现语法错误,因为 string_agg() 对 2012 模式无效。

这是我正在使用的 SQL:

SELECT
Compatibility_Level,
CASE Compatibility_Level
WHEN 65 THEN 'SQL Server 6.5'
WHEN 70 THEN 'SQL Server 7.0'
WHEN 80 THEN 'SQL Server 2000'
WHEN 90 THEN 'SQL Server 2005'
WHEN 100 THEN 'SQL Server 2008/R2'
WHEN 110 THEN 'SQL Server 2012'
WHEN 120 THEN 'SQL Server 2014'
WHEN 130 THEN 'SQL Server 2016'
WHEN 140 THEN 'SQL Server 2017 <<<'
ELSE 'new unknown - ' + CONVERT(VARCHAR(10), Compatibility_Level)
END AS VersionName
FROM
sys.databases
WHERE
Name = DB_NAME()

DECLARE @x TABLE (col1 INT, col2 VARCHAR(5))

INSERT INTO @x
VALUES (1, 1), (1, 2), (1, 3), (2, 1), (2, 2)

SELECT * FROM @x

SELECT col1, string_agg(col2,', ')
FROM @x
GROUP BY col1

这是输出:

Compatibility_Level VersionName
------------------- ------------------------
110 SQL Server 2012

(1 row affected)

(5 rows affected)

col1 col2
----------- -----
1 1
1 2
1 3
2 1
2 2

(5 rows affected)

col1
----------- ------------------------------------
1 1, 2, 3
2 1, 2

(2 rows affected)

最佳答案

兼容模式的目的是确保在以前版本的 SQL Server 中有效的语句在新版本的 SQL Server 中以相同的方式表现。

这包括以前有效但在新版本中无效的语句,以及在不同版本之间具有不同含义或行为不同的语句。

在之前的版本中无效的声明不包括在这个目标中。

为什么?考虑升级。您首先想要将所有内容转换为新的语法和函数,然后当您满意一切就绪时,您可以提高兼容性级别。如果您不允许在新兼容级别中有效的内容(但之前无效或无意义),那么迁移到更高级别就变得困难。

关于sql-server - 兼容模式允许新命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51975244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com