问题标签 [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.
sql-server - 数据库还原后如何调整兼容级别?
我们有一些 SQL 服务器。使用不同的版本,即 2005、2008、2012、2014。(我们计划很快离开 2005)。很多时候,我们的 DBA 将简单地备份和恢复“模板”客户端数据库,以从恢复的模板创建“新”数据库。
问题是恢复后的兼容性级别有时是 80(或 90)。我们的新 SQL 脚本至少需要 90 级才能获得新的 SQL 功能。
因此,我编写了一个脚本来检查master
数据库兼容性级别并调整该服务器上的目标客户端数据库。
我的问题,这种方法正确吗?我应该检查master
数据库还是model
数据库?盲目地将客户端数据库设置为主/模型有什么缺点吗?
sql-server - 为什么允许这样做:使用 compatibility_level = 100 创建数据库 [MyExample]
在 SQL Server 中,执行以下操作没有错误:
它可以创建一个数据库,但它没有设置它的兼容性级别。那为什么允许这种语法呢?
相反,如果我这样做:
然后我按预期在“nonsense_notexisting”附近收到错误语法错误。
我的问题是:如果第一个语法没有设置兼容级别,为什么允许它?
PS!我不是在问如何创建具有特定兼容性的数据库。我知道这是通过以下方式完成的:
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 语言很好。知道如何解决吗?
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 关闭了它。
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) 之外,是否有解决方法?
兼容性级别不同的示例
json - 兼容级别 100 SQL SERVER 2016 中的 OPENJSON
我需要使用OPENJSON()
兼容级别为 100 的旧数据库中的功能。服务器运行 SQL SERVER 2016。所以我想出了这个想法:在同一服务器中创建另一个数据库“GeneralUTILS”(lvl 130)并从100 级数据库:
但是我没有 WITH 子句来修改 lvl 100 数据库中的输出表。
sql-server - STRING_AGG 在兼容级别 < 140 上工作
我知道STRING_AGG
是在兼容级别 140 的 SQL Server 2017 中引入的。
预期的行为是在 2016 或更低版本上运行时收到错误消息“string_agg”不是可识别的内置函数。
在本地 SQL Server (2016) 上运行时出错。但是,即使在将兼容性级别降低到 130 甚至 110 也没有给出任何错误之后,当我在 Azure SQL 上运行时,它也可以正常执行。
Azure SQL 中的兼容性级别行为是否发生了变化?像,新旧语法/代码/功能都有效吗?
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. 创建调试表和调试数据
- 可以使用不同的 COMPATIBILITY_LEVEL 设置执行此查询,并且性能会有很大差异。
json - SQL脚本中json字符串的计数项(兼容版本100,无openjson)
我的 Json 字符串有几个项目,我可以json_value
用来获取特定项目并解析它。但是需要知道要迭代的项目的长度。
例如JSON_VALUE(@myJsonString, N'$[1].email')
返回David@gmail.com
,但我需要知道要增加的长度。
我注定要使用openjson吗?