小编Nic*_*Nic的帖子

使用 WITHOUT_ARRAY_WRAPPER 返回奇数数据的 JSON 子查询?

SQL Server 2016,我正在尝试处理一些常规数据并返回一个 JSON 对象以供另一个系统处理。另一个系统无法识别数组包装器,因此我尝试使用 WITHOUT_ARRAY_WRAPPER 来摆脱它。在子查询中使用时会返回奇怪的结果...

SELECT @@SERVERNAME AS [Servername],
( SELECT [Name], [Recovery_Model_Desc]  
    FROM sys.databases
    WHERE name in ('master', 'model', 'msdb')
    FOR JSON PATH
    ) AS d
FOR JSON PATH, ROOT('ServerInformation')
Run Code Online (Sandbox Code Playgroud)

这会产生预期的数据,使用数组包装器......

{"ServerInformation":[{"Servername":"MyServer","d":[{"Name":"master","Recovery_Model_Desc":"SIMPLE"},{"Name":"model","Recovery_Model_Desc" :"FULL"},{"Name":"msdb","Recovery_Model_Desc":"SIMPLE"}]}]}

但是, WITHOUT_ARRAY_WRAPPER 产生...

SELECT @@SERVERNAME AS [Servername],
( SELECT [Name], [Recovery_Model_Desc]  
    FROM sys.databases
    WHERE name in ('master', 'model', 'msdb')
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
    ) AS d
FOR JSON PATH, ROOT('ServerInformation')
Run Code Online (Sandbox Code Playgroud)

{"ServerInformation":[{"Servername":"MyServer","d":"{\"Name\":\"master\",\"Recovery_Model_Desc\":\"SIMPLE\"},{\"Name \":\"model\",\"Recovery_Model_Desc\":\"FULL\"},{\"Name\":\"msdb\",\"Recovery_Model_Desc\":\"SIMPLE\"}"}] }

而我希望它产生

{"ServerInformation":{"Servername":"MyServer","d":{"Name":"master","Recovery_Model_Desc":"SIMPLE"},{"Name":"model","Recovery_Model_Desc":" FULL"},{"Name":"msdb","Recovery_Model_Desc":"SIMPLE"}}}

错误或预期结果?

编辑:调整预期结果

sql-server subquery json sql-server-2016

7
推荐指数
2
解决办法
5434
查看次数

使用 SMO 收集读取路由信息在 SQL Server 2016 中不准确

我最近一直在使用 SMO 来检查一些属性,并且在尝试收集有关 SQL Server 2016 中的读取路由顺序的信息时遇到了一个问题。

在早期版本中,路由列表非常简单,列表将按顺序处理,但在 2016 年,他们引入了循环算法,允许您让多个辅助副本接受读取流量。

虽然此数据可通过 T-SQL 访问,但 SMO 似乎并未更新以反映这一点,这意味着您无法准确获取或设置配置,因为它仍然是一个简单的字符串集合。

是否有一些我遗漏的属性可以让我获得 SQL Server 2016 的准确数据?(下面的 C# 示例 SMO 调用)

它只是似乎无法访问的循环信息,它列出了读取路由列表中的所有副本,它似乎没有区分可能存在的各种副本组。

连接错误报告。 连接已死...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

namespace SmoTesting
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter the servername");
            string connectServer = Console.ReadLine();
            Console.WriteLine("Enter the AG name");
            string agName = Console.ReadLine();

            Server srv = new Server();

            try
            {
                srv = new Server(connectServer);
                srv.ConnectionContext.StatementTimeout = …
Run Code Online (Sandbox Code Playgroud)

sql-server metadata smo availability-groups sql-server-2016

7
推荐指数
1
解决办法
207
查看次数

从 SQL Server 2016 故障转移群集切换到可用性组

DBA 角色落入了我的怀抱,现在我被要求调查 Always On Availability Groups。

  1. 那么,在可用性组环境中,是否所有服务器都需要具有相同的规格?假设我的服务器 A 有 20 个核心的企业环境,服务器 B 和 C 是否必须每个都有 20 个核心?

  2. 灾难恢复如何工作?目前我有一个到异地的镜像,连接正常,我是否必须增加连接带宽?DR 站点是可用性组的一部分吗?我的印象是(可能 100% 错误),如果数据库处于恢复模式,无法访问,则您不必为 SQL Server 许可证付费。现在使用 Always On 听起来好像即使您没有访问服务器也被迫获得许可证。

  3. 使用可用性组,我可以为一个组创建一个主服务器并为另一个 AG 设置不同的主服务器,这可能吗?

sql-server availability-groups sql-server-2016

5
推荐指数
1
解决办法
474
查看次数

使用不同的服务帐户时向 SQL Server 颁发恢复证书

我正在尝试在 SQL 2017 中配置备份加密,但遇到了一些问题。

我在一台机器上创建主密钥和证书没有问题。我在另一台机器上安装证书并读取备份也没有问题,但是,如果另一台机器运行的服务帐户与创建证书的服务帐户不同,这将不起作用。

以下是我正在采取的步骤(我也尝试恢复主密钥,但也会引发错误):

/* Server 1 */
/* Create the master key */
USE master;  
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SomeRandomSecureString';  
GO 


/* Create the certificate to be used for backups */
CREATE CERTIFICATE BackupCert  
   WITH SUBJECT = 'Backup Encryption Certificate';  
GO

/* Backup the master key */
BACKUP MASTER KEY TO FILE = '\\FileShare\DatabaseMasterKey_Master.key'   
    ENCRYPTION BY PASSWORD = 'SomeRandomPwd';

BACKUP CERTIFICATE BackupCert TO FILE = '\\FileShare\BackupCert.cer'
  WITH PRIVATE KEY (FILE = '\\FileShareBackupCert.pvk',   
     ENCRYPTION BY …
Run Code Online (Sandbox Code Playgroud)

sql-server backup encryption sql-server-2017

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