问题标签 [compatibility-level]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
688 浏览

sql-server - 数据库还原后如何调整兼容级别?

我们有一些 SQL 服务器。使用不同的版本,即 2005、2008、2012、2014。(我们计划很快离开 2005)。很多时候,我们的 DBA 将简单地备份和恢复“模板”客户端数据库,以从恢复的模板创建“新”数据库。

问题是恢复后的兼容性级别有时是 80(或 90)。我们的新 SQL 脚本至少需要 90 级才能获得新的 SQL 功能。

因此,我编写了一个脚本来检查master数据库兼容性级别并调整该服务器上的目标客户端数据库。

我的问题,这种方法正确吗?我应该检查master数据库还是model数据库?盲目地将客户端数据库设置为主/模型有什么缺点吗?

0 投票
0 回答
61 浏览

sql-server - 为什么允许这样做:使用 compatibility_level = 100 创建数据库 [MyExample]

在 SQL Server 中,执行以下操作没有错误:

它可以创建一个数据库,但它没有设置它的兼容性级别。那为什么允许这种语法呢?

相反,如果我这样做:

然后我按预期在“nonsense_notexisting”附近收到错误语法错误。

我的问题是:如果第一个语法没有设置兼容级别,为什么允许它?


PS!我不是在问如何创建具有特定兼容性的数据库。我知道这是通过以下方式完成的:

0 投票
2 回答
615 浏览

merge - SSAS 表格 1400 中的 Power BI 合并查询

大家好,

在 Power BI 中,我可以轻松地合并两个表,因为您可以(即使使用 csv 文件)添加新查询并通过两次单击合并它们。

我需要的是在表格 1400 中重现相同的合并。问题是源表是位于不同文件夹中的两个 CSV 文件。我在导入之前成功地用 M 语言进行了合并。

这是我的桌子 在此处输入图像描述

在此处输入图像描述

这是合并的在此处输入图像描述 所以,你可以看到它一直工作到那里。但是一旦我点击导入,就会有一条错误消息说The name 'Table2' wasn't recognized. Make sure it's spelled correctly

所以它必须与合并背后的M语言有关,但对我来说是正确的。这里是M语言

let Source = Table.NestedJoin(Table2,{"Name"},Table1,{"Name"},"NewColumn",JoinKind.LeftOuter), #"Expanded NewColumn" = Table.ExpandTableColumn(Source, "NewColumn", {"Name", "Age", "Country"}, {"NewColumn.Name", "NewColumn.Age", "NewColumn.Country"}), #"Removed Columns" = Table.RemoveColumns(#"Expanded NewColumn",{"NewColumn.Name"}), #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"NewColumn.Age", "Age"}, {"NewColumn.Country", "Country"}}), #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Age", Int64.Type}}) in #"Changed Type"

实际上我有点迷茫,因为对我来说 M 语言很好。知道如何解决吗?

0 投票
1 回答
1001 浏览

sql-server - 将兼容级别从 100 切换到 130 会导致锁定或死锁问题吗?

我们目前正在我们的开发环境 (sql server 2016) 中测试从 100 升级到兼容级别 (cl) 130 的切换。切换后我们注意到一些错误:

经过一些研究、跟踪和调试,我能够确认我们确实遇到了死锁问题。我们使用 .net 应用程序,它使用 nhibernate 访问数据库。一些内部任务(在 .net 应用程序中)可以为我们设置并行性以更快地完成。这些任务通常以不可能出现(行)死锁的方式分配它们的工作量。即任务 1 和任务 2 可以大致同时访问表 A 和表 B,但它们永远不会访问每个表中的相同行。

这些任务调用一些存储过程,它们执行一些简单的操作,例如:

本质上,这将通过 Tab1 运行,搜索要更新的行并更新这些行。

这一切在兼容级别(cl)100 下运行良好。切换到 cl 130 后,我们有时会出现死锁,我们以前没有遇到过。

死锁图显示了同一对象 id/hobt id 上的两个 Key 锁,其中两个不同的服务器进程持有一个 X-Lock 并请求一个 U。

如果我在表 Tab1 中添加不相关的行,对于这个特定的测试,它会将页数增加到 23,并且没有更多问题。

我读过,这整个问题可能是由少量的行/页引起的。与具有数百万行的表相比,优化器/服务器的行为不同,这会导致不同的锁定行为并可能导致死锁。

但这并不能回答我的问题:兼容性级别从 100 切换到 130 时是否会直接影响锁定,甚至可能导致死锁问题,以前没有?

PS:这不是锁升级问题,因为我已经为 Table Tab1 关闭了它。

0 投票
1 回答
702 浏览

sql - SQL Server:升级后的数据库兼容性级别

我们目前正在将几个 SQL Server 实例从 SQL Server 2008 R2 升级到 SQL Server 2012。

这是一个临时解决方案(因为 Microsoft 对 2008 R2 的 EOL 支持即将推出)。

我注意到升级后所有系统数据库除了主数据库都设置为新的compatibility_level(110)。

有人知道为什么[master]不把新compatibility_level的作为升级的一部分吗?

我知道我可以手动设置它,但想知道为什么它没有设置为默认的其他系统数据库。

谢谢,

在此处输入图像描述

0 投票
0 回答
462 浏览

datetime - 在兼容的 SQLServer 2014 vs SQLServer2016 中,mssql-jdbc datetime java 类型转换为 datetime2

我们正在使用 SQLServer 2012-2016。DATETIME 数据类型是许多表中键的一部分。当我们使用jdbcTemplate.query(query, queryParams, resultSetExtractor) 发送到 SQLServer 的内容执行查询时:

尽管数据库中的数据类型是 DATETIME,但参数数据类型是 DATETIME2。请参阅github 中记录的问题。此外,SQLServer 改变了它的行为参见链接SQLServer 2016 年改进 参见下面的示例以了解兼容性级别之间的不同 上述两个问题之间的连接导致 sql 语句在不同 SQLServer 版本中检索相同数据的不同行。

除了将数据库中的数据类型更改为 DATETIME2(3) 之外,是否有解决方法?

兼容性级别不同的示例

0 投票
2 回答
1335 浏览

json - 兼容级别 100 SQL SERVER 2016 中的 OPENJSON

我需要使用OPENJSON()兼容级别为 100 的旧数据库中的功能。服务器运行 SQL SERVER 2016。所以我想出了这个想法:在同一服务器中创建另一个数据库“GeneralUTILS”(lvl 130)并从100 级数据库:

但是我没有 WITH 子句来修改 lvl 100 数据库中的输出表。

0 投票
1 回答
273 浏览

sql-server - STRING_AGG 在兼容级别 < 140 上工作

我知道STRING_AGG是在兼容级别 140 的 SQL Server 2017 中引入的。

预期的行为是在 2016 或更低版本上运行时收到错误消息“string_agg”不是可识别的内置函数。

在本地 SQL Server (2016) 上运行时出错。但是,即使在将兼容性级别降低到 130 甚至 110 也没有给出任何错误之后,当我在 Azure SQL 上运行时,它也可以正常执行。

Azure SQL 中的兼容性级别行为是否发生了变化?像,新旧语法/代码/功能都有效吗?

0 投票
1 回答
456 浏览

sql-server - 升级到 COMPATIBILITY_LEVEL 120 时 SQL 查询慢

我们已经在 COMPATIBILITY_LEVEL < 120 中运行数据库有一段时间了,因为我们无法确定某些查询运行速度非常慢的原因。不是我觉得这是解决 covid-19 无聊问题的完美方法,因此我尝试解决新的(嗯……不再那么新)CE 的问题。

所以,我有一个相当简单的查询,涉及 3 个表和 2 个表值参数

以兼容级别 110 运行此查询时,查询速度快如闪电,不到 0.3 秒。当更改为兼容级别 120 时,查询大约需要 8-9 秒才能执行!:(

在调查实际执行计划时,我发现有一个聚集索引查找分配了大约 7 秒,因此我专注于那部分

实际执行计划 慢聚集索引查找的解释

我试图将此查询分解为另一个表值参数,然后查询又很快了。然而,这意味着我必须在很多地方重写我的应用程序,我真的很想知道为什么这很慢以及如何处理它。

任何人都可以阐明这个问题吗?

编辑 2020-04-15 12:57 CET 这是一个重现简化场景的调试脚本: 1. 创建调试表和调试数据

  1. 可以使用不同的 COMPATIBILITY_LEVEL 设置执行此查询,并且性能会有很大差异。
0 投票
0 回答
44 浏览

json - SQL脚本中json字符串的计数项(兼容版本100,无openjson)

我的 Json 字符串有几个项目,我可以json_value用来获取特定项目并解析它。但是需要知道要迭代的项目的长度。

例如JSON_VALUE(@myJsonString, N'$[1].email')返回David@gmail.com,但我需要知道要增加的长度。

我注定要使用openjson吗?