标签: sql-server-2016

SQL Server 2016_无法启动镜像

将SQL Server 2014升级到SQL Server 2016(都是企业版)后,我无法启动镜像。

这在 SQL Server 2014 上正常工作。

在使用主数据库的完整备份和日志备份恢复(WITH NORECOVERY)镜像数据库后,我通常会运行configure setup。

点击后Start mirror出现此错误:

数据库“DatabaseName”无法打开。它正处于恢复过程中。(微软 SQL Server,错误:927)

sql-server-administration sql-server-2016

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

SSDT 无法识别 SQL Server 2016 中的 STRING_SPLIT 函数

尝试在存储过程中使用 SQL Server 2016 STRING_SPLIT 函数。它在 SSMS 中解析正确。但在SSDT(最新版本)中,该函数无法解析,因此项目无法编译。有人知道如何解决这个问题吗?谢谢。

sql-server-data-tools sql-server-2016

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

使用 case 语句时,SQL Server 2016 FOR JSON PATH 返回字符串而不是数组

我正在尝试使用 SQL Server 2016 构建一个包含数组的 JSON 对象。

数组的源数据本身就是 JSON,因此我在JSON_QUERYselect 语句内部使用,并将 FOR JSON 子句应用于该 select 语句。

一切都工作得很好,直到我将JSON_QUERY子句包装在CASE语句中(在某些情况下不得包含数组,即必须为空)。

下面的代码说明了这个问题:

declare  @projects nvarchar(max) = '{"projects": [23439658267415,166584258534050]}'
declare @id bigint = 123

SELECT 
      [data.array1] = JSON_QUERY(@projects, '$.projects') -- returns an array - perfect.
    , [data.array2] = CASE WHEN 1 is NOT NULL 
                           THEN JSON_QUERY(@projects, '$.projects') 
                           ELSE NULL END -- returns an array - still good!
    , [data.array3] = CASE WHEN @id is NOT NULL
                           THEN JSON_QUERY(@projects, '$.projects') 
                           ELSE …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server arrays json sql-server-2016

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

如何使用 FOR JSON PATH 将包含键/值对的表查询到 JSON 对象中?

我有一个资产表和一个属性表,其中属性是简单的键/值对。

DECLARE @Asset TABLE(AssetID INT)
INSERT @Asset VALUES (1)

DECLARE @Att TABLE (AssetID INT, Name NVARCHAR(100), Val NVARCHAR(100))
INSERT @Att VALUES (1, 'height', '100px'), (1, 'width', '200px')
Run Code Online (Sandbox Code Playgroud)

我想编写一个按资产分组的查询,并包含一个包含所有属性的 JSON 表示形式的列。例如:

AssetID      Attributes
------------ -----------------------------------------------
1            {"height":"100px","width":"200px"}
Run Code Online (Sandbox Code Playgroud)

如何编写查询以使属性名称值成为结果 JSON 对象中的键?当我使用 FOR JSON PATH 时,键是列名称:

AssetID      Attributes
------------ -----------------------------------------------
1            {"height":"100px","width":"200px"}
Run Code Online (Sandbox Code Playgroud)

返回...

AssetID      Attributes
------------ -----------------------------------------------
1            [{"Name":"height","Val":"100px"},{"Name":"width","Val":"200px"}]
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016

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

SQL 2016 - 将 XML 转换为 Json

我正在尝试使用 SQL2016 中的 FOR JSON PATH 将 XML 列转换为 Json,但遇到一些问题。给定以下 XML(请注意,某些 Product 元素可能包含 Product 列表):

  <Request>
    <SelectedProducts>
      <Product id="D04C01S01" level="1" />
      <Product id="158796" level="1" />
      <Product id="7464" level="2">
        <Product id="115561" level="3" />
      </Product>
      <Product id="907" level="2">
        <Product id="12166" level="3" />
        <Product id="33093" level="3" />
        <Product id="33094" level="3" />
        <Product id="28409" level="3" />
      </Product>
      <Product id="3123" level="2">
        <Product id="38538" level="3" />
        <Product id="37221" level="3" />
      </Product>
    </SelectedProducts>    
  </Request>
Run Code Online (Sandbox Code Playgroud)

我可以在 SQL 上运行以下语句(其中 @xml 是上面的 XML):

SELECT 
     d.value('./@id', 'varchar(50)') AS 'Id'
    ,d.value('./@level', 'int') …
Run Code Online (Sandbox Code Playgroud)

xml t-sql sql-server json sql-server-2016

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

具有多个删除语句的 SQL Server CTE

我有一个 CTE:

;WITH DeleteTarget AS
(
    ....
)
Run Code Online (Sandbox Code Playgroud)

我如何将此 CTE 用于两个删除语句 - 可能像:

DELETE FROM [TableA]
WHERE ColumnA IN (SELECT Id FROM DeleteTarget)

DELETE FROM [TableB]
WHERE ColumnB IN (SELECT Name FROM DeleteTarget)
Run Code Online (Sandbox Code Playgroud)

common-table-expression sql-server-2016

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

如何在列上添加隐藏属性?

创建时态表时,我们需要定义开始和结束日期时间列,这些列在或hidden中不可见。我想再添加一列,其中包含有关已提交更改的用户的信息。SELECT *INSERT without columns

问题是,我收到以下错误:

Msg 13735, Level 16, State 1, Line 10
Cannot alter HIDDEN attribute on column 'UserID' in table 'GK' because this column is not a generated always column.
Run Code Online (Sandbox Code Playgroud)

这是代码:

DROP TABLE IF EXISTS GK;

CREATE TABLE GK
(
    [ID] INT
   ,[UserID] BIGINT DEFAULT (CONVERT(BIGINT, SESSION_CONTEXT(N'user_id')))  
)

ALTER TABLE GK
ALTER COLUMN [UserID] ADD HIDDEN;
Run Code Online (Sandbox Code Playgroud)

为什么我不允许在此类列上添加此属性?

t-sql sql-server sql-server-2016 temporal-tables

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

ProxyAccount“yyy”的更改失败 (Microsoft.SqlServer.Smo)

我在尝试在 Microsoft SQL Server Management Studio 中编写创建凭据和相关代理的脚本时遇到问题。

我的脚本如下:

CREATE CREDENTIAL xxx WITH IDENTITY = 'domain\xxx', SECRET = '*******';

EXEC msdb.dbo.sp_add_proxy @proxy_name  = 'yyy' 
,@enabled = 1 
,@description = 'description here'
,@credential_name = 'xxx'

EXEC msdb.dbo.sp_grant_proxy_to_subsystem @proxy_name = 'yyy'
,@subsystem_id = 9;
Run Code Online (Sandbox Code Playgroud)

这将创建凭证和代理。

但是,它无法将凭据正确添加到代理。当尝试手动(使用 UI)添加凭据时,我收到以下错误:

ProxyAccount“yyy”(Microsoft.SqlServer.Smo) 的更改失败附加信息:未将对象引用设置为对象的实例。(微软.SqlServer.Smo)

尝试添加凭据

错误信息

我尝试删除凭据并重新添加它,但没有结果。我尝试删除并重新添加代理,但收到以下错误:

未定义代理的凭据名称。(SqlManagerUI)

这可以追溯到无法为该代理分配凭证。

t-sql sql-server sql-agent sql-server-2016

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

有没有办法在每个 SSIS 包之前和之后启动存储过程?

我正在寻找一种方法——使用内置的 SSIS 功能或定制的(3rd 方软件或内部编码)——用特定代码“包装”每个执行的 SSIS 包,例如在之前和之后启动某些 SQL 程序所有执行步骤。

这些旨在记录流程步骤、处理错误、设置通知等。

这里的关键思想是避免手动编辑此代码并将其添加到每个单独的 SSIS 包中 - 尽管可行,但如果上述设置中的任何内容发生变化,维护起来会很痛苦。

您的 SSIS / SQL Server 专家就该主题提出的任何建议将不胜感激。

编辑:或者,有没有一种方法可以轻松重构现有的已部署 SSIS 包并快速轻松地添加/修改该代码?

t-sql sql-server ssis stored-procedures sql-server-2016

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

如何在简单的三向关系上实现基于约束的参照完整性

我有三个简单的关系。TableB和TableC既参考TableA,TableC也参考TableB。

我发现无法在 SQL Server 中以通过约束强制执行参照完整性的方式对此进行建模,但这也允许从任何实体中删除记录,而无需复杂且低效的基于触发器的参照完整性检查,或手动删除相关实体正确的顺序。

这是我的架构。

create table TableA (
   Id int identity not null,
   constraint P_TableA_Id primary key (Id)
)

create table TableB (
   Id int identity not null,
   constraint P_TableB_Id primary key (Id),

   ARef int,
   constraint F_TableB_ARef foreign key (ARef) references TableA(Id) on delete cascade
)

create table TableC (
   Id int identity not null,
   constraint P_TableC_Id primary key (Id),

   ARef int,
   constraint F_TableC_ARef foreign key (ARef) references …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2016

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