我在用 :
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 小时以来一直在进行,但仍未完成。那么谁能告诉我此时需要做什么。
这个收缩操作需要多少时间?
对于 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 …
我查看了 Microsoft 文档,但没有找到答案,我的计算机上已经安装了 SQL Server 2016 Express 版本,想知道是否可以将 SQL Server 2016 Developer 版本与 Express 版本并排安装?
是否可以在 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 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) 我的表中有一个包含表情符号值的列。我想执行一个 Select 语句以从每一行中删除所有表情符号(如果包含它们)。
\n\n例如,如果我的行阀具有以下值:
\n\n"I\'m a \xe2\x80\x8d \xe2\x80\x8d Developer \xe2\x80\x8d \xe2\x80\x8d ."\nRun Code Online (Sandbox Code Playgroud)\n\n那么输出应该如下所示:
\n\n"I\'m a Developer ." \nRun Code Online (Sandbox Code Playgroud)\n 我在 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 构建任务来做到这一点。这让我觉得我可能会以艰难的方式做这件事。(但在过去的几年里,这对我来说效果很好)。我喜欢数据库项目,我喜欢它们强制引用并确保我们在删除列时不会破坏其他对象(例如)。
任何见解将不胜感激。
我需要从 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)
我怎样才能达到这个结果?
我确信这必须在某个地方得到回答,但对于我的生活,无论我如何更改搜索词组,我似乎都找不到任何东西。
我需要从两个完全独立的表中选择数据并将信息导出到 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) 我有一个出勤表,如下所示:

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

更多信息:我不知道这是否重要,但我最多有 20 列,因为我们的出席人数最多为 20 人。所以这取决于Col20。
sql-server-2016 ×10
sql-server ×8
t-sql ×4
json ×3
sql ×3
aggregate ×1
deployment ×1
encryption ×1
open-json ×1
sqlpackage ×1
tfsbuild ×1