标签: sql-server-2016

无法收缩 SQL Server 中的数据文件(花费太多时间)

我在用 :

SQL Server 2016 标准版

Windows Server 2012 R2(标准)

数据库大小: 1.4TB

主数据文件已用空间: 587GB

主数据文件中未使用的空间: 852GB

恢复模型:简单

我尝试使用以下命令将数据文件缩小到 687GB:

USE [TestDB]
GO
DBCC SHRINKFILE (N'TestDB' , 687017) 
GO
Run Code Online (Sandbox Code Playgroud)

并且该数据库上没有阻塞,也没有发生其他活动。

上述收缩操作自过去 19 小时以来一直在进行,但仍未完成。那么谁能告诉我此时需要做什么。

这个收缩操作需要多少时间?

sql-server-2016

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

为“位”类型的列聚合逻辑 AND / OR

对于 T-SQL (SQL Server 2016)bit 类型,是否有某种方法可以实现逻辑 AND 和逻辑 OR 的聚合等效?例如,使用此表:

CREATE TABLE #Example       (id int, category int, isRed bit, isBlue bit)
INSERT INTO #Example VALUES (     1,            1,         1,          1)
INSERT INTO #Example VALUES (     2,            1,         0,          0)
INSERT INTO #Example VALUES (     3,            1,         1,          0)
INSERT INTO #Example VALUES (     4,            2,         0,          1)
INSERT INTO #Example VALUES (     5,            2,         0,          1)
INSERT INTO #Example VALUES (     6,            2,         0,          1)
Run Code Online (Sandbox Code Playgroud)

我想创建一个查询,列表,每个类别,如果任何isRed …

sql t-sql sql-server aggregate sql-server-2016

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

是否可以同时安装 SQL Server Express 版本和 SQL Server Developer 版本?

我查看了 Microsoft 文档,但没有找到答案,我的计算机上已经安装了 SQL Server 2016 Express 版本,想知道是否可以将 SQL Server 2016 Developer 版本与 Express 版本并排安装?

sql-server sql-server-2016 sql-server-2016-express

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

使用 Sql Server 2016 的 OPENJSON 函数从 Json 文档中的多个数组元素中选择结果

是否可以在 Sql Server 2016 中将来自多个数组元素的 json 文档的部分组合成单个结果?

鉴于此json:

{
  "fruit": {
    "types": [
      {
        "possible": [ "Apples", "Bananas", "Pears" ],
        "category": "Basic"
      },
      {
        "possible": [ "Oranges", "Grapefruit", "Lemons", "Limes" ],
        "category": "Citrus"
      },
      {
        "possible": [ "Blueberries", "Strawberries", "Cherries" ],
        "category": "Berries"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我想看到来自可能元素的所有值的单个结果:

results
-----
Apples
Bananas
Pears
Oranges
Grapefruit
Lemons
Limes
Blueberries
Strawberries
Cherries
Run Code Online (Sandbox Code Playgroud)

我已经接近这样做了:

SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types[0].possible'))
UNION
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types[1].possible'))
UNION
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types[2].possible'))
Run Code Online (Sandbox Code Playgroud)

但这依赖于将查询与数组中的元素数量联系起来。有没有办法在不必单独指定每个数组元素的情况下做到这一点?像这样的东西(这些都不是有效的表达):

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server json sql-server-2016 open-json

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

如何在 SQL Server Always Encrypted 列上使用 Like 运算符?

请帮助我修复 SQL Sever 2016 中的以下查询,其中列 FIRST_NAME、LAST_NAME 始终是加密的。

SELECT * FROM MY_TABLE
WHERE (LAST_NAME LIKE '%[@,#,$,%,*]%' OR LAST_NAME LIKE '%,%')
OR (FIRST_NAME LIKE '%[@,#,$,%,*]%' OR FIRST_NAME LIKE '%,%');
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,因为列始终是加密的,而且我无法声明变量并将字符串分配给它。

Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(50) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_POC_CERTSTORE', column_encryption_key_database_name = 'UIM-LOCAL-DB') collation_name = 'Latin1_General_BIN2' is incompatible with varchar
Run Code Online (Sandbox Code Playgroud)

sql-server encryption sql-server-2016 always-encrypted

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

如何在 Select 语句时从列值中删除表情符号

我的表中有一个包含表情符号值的列。我想执行一个 Select 语句以从每一行中删除所有表情符号(如果包含它们)。

\n\n

例如,如果我的行阀具有以下值:

\n\n
"I\'m a \xe2\x80\x8d \xe2\x80\x8d Developer \xe2\x80\x8d \xe2\x80\x8d ."\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么输出应该如下所示:

\n\n
"I\'m a Developer ." \n
Run Code Online (Sandbox Code Playgroud)\n

sql sql-server sql-server-2016

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

SqlPackage - 如何阻止它关闭我的查询存储?

我在 Visual Studio 2017 中有一个数据库项目。我们的数据库项目的管理就像任何其他代码库一样,多个开发人员可以根据需要更新项目。为了减轻部署的痛苦,我在我们的 TFS 2018 (vNext) 构建过程中构建了一个自定义部署任务,它是一个调用 sqlPackage.exe 的 powershell 脚本。SqlPackage 将我们编译的数据库项目(*.dacpac 文件)与我们的目标数据库(在 Dev、QA 等中)进行比较。我配置了自定义步骤,以便它将预期的更改写入磁盘,以便我记录更改的内容,然后 sqlPackage 运行第二遍以将更改应用于预期的目标数据库。

我的 DBA 在我们的 SQL 2016 数据库中启用了查询存储。在我的 sqlPackage 部署期间,初始步骤之一是关闭查询存储,这让我的 DBA 不高兴。他希望能够比较部署前和部署后的更改,但如果查询存储被关闭,我们将丢失历史记录。

我已经尝试了文档中的几个开关 ( https://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx#Publish%20Parameters,%20Properties,%20and%20SQLCMD% 20Variables ) 但我似乎找不到魔法参数。

如何阻止 SqlPackage 关闭查询存储?

我目前的脚本:

sqlPackage.exe /Action:Script /SourceFile: myPath\MyDatabaseName.dacpac" /OutputPath:"myPath\TheseAreMyChangesThatWillBeApplied.sql" /TargetConnectionString:"Integrated Security=true;server=MyServer;database=MyDatabase;" /p:DropObjectsNotInSource=false /p:DropPermissionsNotInSource=false /p:DropRoleMembersNotInSource=false /p:BlockOnPossibleDataLoss=True /Variables:"CrossDatabaseRefs=CrossDatabaseRefs
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?我很惊讶我必须编写一个自定义的 TFS 构建任务来做到这一点。这让我觉得我可能会以艰难的方式做这件事。(但在过去的几年里,这对我来说效果很好)。我喜欢数据库项目,我喜欢它们强制引用并确保我们在删除列时不会破坏其他对象(例如)。

任何见解将不胜感激。

t-sql deployment tfsbuild sqlpackage sql-server-2016

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

从 Json 数组中选择最后一个值

我需要从 JSON 格式获取数组中的最后一项。我有这个 JSON。

  @json =   
  N'{ 
        "solution": "xxxxxxxxxxxxxxxxxxxxx",
        "options": [
            {
                "choice_id": 205073,
                "choice": "aaaa"
            },
            {
                "choice_id": 205074,
                "choice": "bbbb"
            },
            {
                "choice_id": 205075,
                "choice": "cccc"
            },
            {
                "choice_id": 205076,
                "choice": "dddd"
            }
        ],
    }'  
Run Code Online (Sandbox Code Playgroud)

我想得到

  @json =   
  N'{ 
        "solution": "xxxxxxxxxxxxxxxxxxxxx",
        "options": {
              "choice_id": 205076,
              "choice": "dddd"
        }
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到这个结果?

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

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

将多个 SELECT 语句转换为单个 JSON

我确信这必须在某个地方得到回答,但对于我的生活,无论我如何更改搜索词组,我似乎都找不到任何东西。

我需要从两个完全独立的表中选择数据并将信息导出到 JSON。在这种情况下,它们在每个表中都是 1 条记录。

如果我一次只选择 1 个并导出到 JSON,它们是 1 个记录,但是当我在 SQL 中加入两个单个记录然后导出到 JSON 时,它们是 1 个记录数组。

仅 1 条记录 SQL 输入:

DECLARE @Json nvarchar(max) = 
(   
    SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]

    FOR JSON PATH
    , INCLUDE_NULL_VALUES
    , WITHOUT_ARRAY_WRAPPER
);

SELECT @Json;
GO
Run Code Online (Sandbox Code Playgroud)

只有 1 条记录 JSON 输出(注意没有数组):

{
  "Data1": "Data1",
  "Data2": "Data2"
}
Run Code Online (Sandbox Code Playgroud)

2 记录 SQL 输入:

DECLARE @Json nvarchar(max) = 
(   
    SELECT
    (
        SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]

        FOR JSON PATH
        , INCLUDE_NULL_VALUES
    ) …
Run Code Online (Sandbox Code Playgroud)

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

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

如何在SQL中实现链

我有一个出勤表,如下所示:

图像在这里。

我试图将人们的出席(编码为 ABC、DEF 等)联系在一起。我希望最终结果如下所示:显示每个部分/出勤链的开始和结束日期。如果人 A 从 2021-01-01 到 2021-01-4 参加,那么它应该显示为一行,因为它是一个连续的链。我不知道该怎么做或从哪里开始。这是一种奇怪的出勤数据保存方式。

最终输出

更多信息:我不知道这是否重要,但我最多有 20 列,因为我们的出席人数最多为 20 人。所以这取决于Col20。

sql sql-server common-table-expression sql-server-2016

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