标签: sql-server-2016

我可以在 SQL Server 2016 CTP 2.X 中将 VARCHAR 字段主体转换为不带引号的 JSON 结果吗?

我已经下载并安装了 SQL Server 2016 Community Technology Preview 2.3,如果我理解正确,它应该包含一个名为JSON_VALUE. (更新:CTP 2.4 已经发布,但也没有提到新的 JSON 功能)

从已经可以使用的 JSON 功能开始,... FOR JSON AUTO可以在我的SELECT语句中指定“ ” ,如下所示:

SELECT [ID], [DATA] FROM [dbo].[JSONDEMO] FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)

上面我的演示查询的结果将是一个包含一列的结果集,具有一些自动生成的名称,例如JSON_F123123123JSON 格式的值,例如:

[{"ID":"IDVALUE", "DATA":"{ {name:'ramsoft', id:1234}, ... }", ... }] 
Run Code Online (Sandbox Code Playgroud)

到目前为止DATA一切顺利,但如果包含 JSON 数据,您将收到一个包含数据字符串文字的 JSON 文档,即使该字符串文字是有效的 JSON。你实际上可能想要的,或者我想要的,是:

 [{"ID":"IDVALUE", "DATA":{ {name:'ramsoft', id:1234}, ... }, ... }] 
Run Code Online (Sandbox Code Playgroud)

根据一些 MS 博客帖子,要将 JSON 值作为 JSON 值而不是作为VARCHAR(n)字符串获取,您应该编写:

SELECT [ID], JSON_VALUE(D.DATA,'$') DATA   
FROM [dbo].[JSONDEMO] D FOR …
Run Code Online (Sandbox Code Playgroud)

sql-server json sql-server-2016

3
推荐指数
1
解决办法
1256
查看次数

SQL Server 在表结果集中缓慢传输结果,但立即使用 XML

我有一个查询,左连接 100 多个表并返回 2,000 多列,但只有几行(10-20)。这部分目前不在我的控制范围内,它过去可以在少一些列的情况下正常运行(可能在正常的非宽表宽度下)。编译初始计划后执行是“即时”的,我实际上并没有将所有结果返回给客户端。如果我返回 1 行,它是即时的并立即返回结果。

当我返回所有 11 个左右的结果时,它会下降到大约需要 15 秒。但是,如果我添加任何“FOR XML [RAW [ELEMENTS, XSINIL]]”迭代,它也会立即返回所有结果以及 XML 开销。据我所知,这排除了查询的实际执行,并将其隔离到正在计算的查询结果和它们被发送到客户端之间。

我一直在寻找大约 4 天的时间来解释这一点。有没有办法通过结果集获得 XML 速度?为什么要这样做?

在 2008R2 和 2016 上尝试过 TCP/IP 和命名管道

更新

根据反馈,对于表格结果,发生的是第一次通过,大约需要 20 秒。SSMS 中的计时器一直运行到大约 11 秒,然后停止。然后,当显示结果时,计时器跳至 20 秒。下一次运行时计时器会挂起,然后在显示结果时,计时器会弹出大约 9-11 秒。

通过将主表的唯一 id 与表函数连接来选择 11 行的方式。我尝试用临时表替换表函数。为了选择一条记录,我基本上将数据传递到导致一个结果的表函数中。我也尝试使用直接的 id = 文字数字。对于那些,计时器在结果显示之前甚至不会离开 0。

我无法“插入”临时表,因为常规表的列太多。我也无法在其上创建索引视图来检查它。

我再次使用 FOR XML 运行查询并检查计时器。它位于 0:00 并表示查询完成。我再次尝试并立即在 xml 中打开结果,它显示了 11 行 xml 行,其中最后一行是 54,000 个字符。如果您剪切并粘贴表格结果,它确实只显示 2023。时间差异可能是每行中的数据量?有多个具有文本类型的列。

说到文本类型,它使我无法对完整查询执行“计数不同”以提取所有列但根本不发送它们。否则我使用 SSMS 并告诉它丢弃结果。我不确定这是否会影响查询计划。它运行得很快。

我希望让这个东西一瘸一拐地走下去,足以改变它的架构方式。从中长期来看,这根本是不可接受的。

到目前为止,感谢大家的洞察力和帮助。

performance sql-server sql-server-2008-r2 sql-server-2016

3
推荐指数
1
解决办法
761
查看次数

无法在 Windows Server 2008 R2 上安装 Microsoft SQL Server 2016 Release Candidate 3 (RC3)

我正在尝试在 Windows Server 2008 R2 上安装 Microsoft SQL Server 2016 Release Candidate 3 (RC3)。

我已经删除了所有其他版本的 SQL Server,并删除了 VS 2015 社区及其所有 SQL Server 组件。

当我从 SQLServer2016RC3-x64-ENU.iso 运行安装程序(从 Microsoft 下载,并成功安装在 Windows 10 上,并安装了 VS 2015 社区)时,我收到以下消息的对话:

Microsoft SQL Server 2016 Release Candidate 3 (RC3) 安装程序:
安装程序仅限于 SharePoint Reporting Services
此服务器运行的是 Windows Server 2008 R2。您可以继续安装以
在 SharePoint 中安装或升级 Reporting Services 功能:
0 Reporting Services - SharePoint
0 Reporting Services 外接程序用于 SharePoint 产品

服务器未安装 SharePoint。为什么会发生这种情况,如何在此服务器上安装 Microsoft SQL Server 2016 Release Candidate 3?

sql-server installation windows-server sql-server-2016

3
推荐指数
1
解决办法
1万
查看次数

SQL Server:我可以从 SQL Server 2014 --> 2016 登录吗?

SQL Server 2014 和 2016,都是标准版。

我们正在迁移到新的 SQL Server。我们通常通过日志传送来做到这一点(这让我们有一个小的转换窗口,因为我们只需要恢复最终日志,从恢复中取出新数据库,修改连接字符串,我们就完成了......)

我们希望在此过程中迁移到 SQL 2016。

可以从 2014 年到 2016 年登船吗?

sql-server sql-server-2016

3
推荐指数
1
解决办法
684
查看次数

查找月中星期几的迭代

我有一个日期维度表,我需要在其中添加一个新列,在该列中定义一个月内一周中某天的迭代(第二个周一/周二/周三/周四/周五/周六/周日等为 2) .

是否可以仅在表格的日期列(“日期”类型)上进行计算?

sql-server t-sql sql-server-2016

3
推荐指数
2
解决办法
1171
查看次数

并排安装 SQL SERVER 2016 SQL Server 2012

我正在尝试在已安装 SQL Server 2012 实例的服务器上安装 SQL Server 2016 - 2012 版本的所有共享和实例功能也已安装。我没有卸载这些的选项,我只需要安装一个单独的、独立的 SQL SERVER 2016 实例。

根据 MS,支持并排。但是它说:“你不能同时准备一个 SQL Server 2016 实例和一个准备好的 SQL Server 2012 实例”

这是什么意思?那么我可以将它们并排放置而没有任何问题吗?

非常感谢

sql-server installation sql-server-2012 sql-server-2016

3
推荐指数
1
解决办法
7207
查看次数

案例语法之间的结果差异

我一直在玩 CASE 语法,并注意到以下我不完全理解的行为差异。

鉴于以下查询

DECLARE @Value1 INT 

SELECT 
    'Col1' = CASE WHEN @Value1 IS NULL THEN 'Yay'
    ELSE 'Oh'
    END
    ,'Col2' = CASE @Value1 WHEN NULL THEN 'Yay'
    ELSE 'Oh'
    END
    ,'Val' = @Value1
Run Code Online (Sandbox Code Playgroud)

我得到的结果集是这样的:

列 1 | Col2 | 瓦尔

耶 | 哦| 空值

我原以为他们会返回相同的结果。有人会很乐意解释这里发生了什么吗?

sql-server sql-server-2016

3
推荐指数
1
解决办法
120
查看次数

Order by 1 将结果集缩短为一行

我正在运行以下查询:

DECLARE @sql NVARCHAR(max) = N''
SELECT @sql += N' EXEC dbo.DoSomething @Tablename = ''' + SCHEMA_NAME(T.schema_id) + N'.' + T.name + N''''
--SELECT * 
FROM sys.tables T
INNER JOIN sys.indexes I ON I.object_id = T.object_id
ORDER by 1 
PRINT  @sql
Run Code Online (Sandbox Code Playgroud)

但我只打印了一行。如果我取出这ORDER by 1条线,或者用它替换它,
ORDER BY t.name那么我就会得到预期的结果。

这是 SQL Server 中的错误吗?
我已经在 SQL Server 2016 SP1 和 2014 Sp2-Cu1 上试过了。

sql-server order-by sql-server-2016

3
推荐指数
1
解决办法
140
查看次数

更改数据捕获与记录更改的触发器

我将创建由触发器填充的历史表(在插入、更新、删除之后)。由于只有 20% 的列要更新,我决定只记录更改的值 - 如果值没有更改,NULL则将在历史表中使用值。例如:

在此处输入图片说明

sparse与记录所有数据的普通实现相比,历史表列将节省大量空间(这是由于我的测试和我的业务案例)。

作为我的SQL Server 2016 SP1 standard edition支持者,Change Data Capture我想知道他们使用它和基于触发器的日志记录之间有什么优点/缺点/区别?

我检查了一些文章(这里这里),但看不出还有什么Change Data Capture可以给我的。

trigger sql-server t-sql change-data-capture sql-server-2016

3
推荐指数
2
解决办法
6400
查看次数

SQL Server 2016 还原速度慢

我们有一个 300 GB 的数据库,我正在测试恢复到新的 SQL Server 2016 实例,在虚拟 Windows 2016 服务器上,用于测试目的。

该 VM 具有 32 GB RAM,在具有 10 个逻辑处理器的 1 插槽 CPU 上运行。(E5 - 2670,2,6GHz)。不确定电源设置,将与设置 VM 的人一起检查。

我第一次恢复时,我是.bak从 2014 年实例的- 文件中进行的。第二次(仍在运行)我是从 SQL Server 2016 实例上的备份中完成的。

两次都花了一个多小时才显示“5% 已处理”消息。在此之前,百分比为 0%(使用显示恢复进度的脚本)。第一次大约2小时后恢复完成。我特别想知道为什么流程指示器开始运行需要这么长时间。当它保持在 0% 时发生了什么?

这在 SQL Server 2016 实例上是正常的,还是有问题?在生产服务器上,还原速度会快得多,但很难进行比较,因为生产服务器是具有多个主轴的专用服务器,而测试服务器是虚拟服务器。

sql-server restore sql-server-2016

3
推荐指数
1
解决办法
8081
查看次数