标签: sql-server-2016

删除后触发执行顺序

假设我有两张表,一张名为ParentTable,另一张名为ChildTable,具有一对多关系,其中一个父项可能有多个子项。

我正在创建一个AFTER DELETE触发器ChildTable。在该触发器中,我正在检查一个值ParentTable(如果存在),如下所示:

-- ...
FROM deleted d
JOIN ParentTable pt ON d.FK_Parent = pt.ID
WHERE pt.Foo = 'bar'
Run Code Online (Sandbox Code Playgroud)
  1. 如果我先从 删除ChildTable,然后从 删除ParentTableAFTER DELETE触发器是在删除行之前还是之后ParentTable触发?

    A。这两个DELETE语句通常位于显式事务中,因为我使用的是实体框架。

  2. 如果我将外键设置为ChildTableCASCADE DELETE然后从ParentTableonly 中删除,当触发器触发时,中的行ParentTable仍然可以访问吗AFTER DELETE

trigger sql-server delete sql-server-2016

0
推荐指数
1
解决办法
1096
查看次数

查询以查找指定日期之间的活跃天数(状态 = ON 的天数)

我有一张表格,如下所示:

create table z_test_duration
( Days     date,
  Status   char(8)
);
Run Code Online (Sandbox Code Playgroud)

样本数据如下:

地位
2022 年 1 月 1 日
2022 年 1 月 2 日
2022 年 1 月 3 日
2022 年 1 月 4 日 离开
2022 年 1 月 5 日
2022 年 1 月 6 日 离开
2022 年 1 月 7 日
2022 年 1 月 8 日
2022 年 1 月 9 日 离开

想要的结果是这样的

时间到了 OFF_DATE COUNT_OF_ACTIVE_DAYS …

sql-server gaps-and-islands sql-server-2016

0
推荐指数
1
解决办法
2752
查看次数

如何使用具有 10 个以上条件的 CASE 语句更新列

我正在尝试使用 CASE 语句更新 SQL Server 2016 中的列,因为我必须根据不同的条件更改值。问题是我有超过 10 个条件,而且 SQL Server 似乎最多只允许 10 个条件级别。那么我该怎么做呢?这是我试图做的:

UPDATE my_table  
SET my_column = CASE 
    WHEN condition1 THEN expression1  
    WHEN condition2 THEN expression2  ...
Run Code Online (Sandbox Code Playgroud)

不是链接服务器,我还没有尝试在CASE表达式中放入 11 个条件。如果您查看文档,您会发现“SQL Server 仅允许在CASE表达式中进行 10 级嵌套”。

sql-server case update sql-server-2016

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

选择包含字母和/或非字母字符的记录

我有一个带有字符串字段 ID 的表,其值如下所示:

 012345678
Run Code Online (Sandbox Code Playgroud)

我想从 ID 字段中选择所有以 0 开头并包含一个字母的记录,例如000A345Bor 0A32C450。我还想选择以零开头并包含-,/ 或空格的记录。

请注意,记录应以 0 开头。

我该如何解决?

sql-server sql-server-2016

-1
推荐指数
1
解决办法
3060
查看次数

删除特殊字符的搜索字符串数据

我们有一张包含约 600 万种产品的表:

ID 姓名 代码
1 123.456.789-M
2 852.789456
3 1-123654.P

按代码列过滤产品而没有掩码(痕迹、斜线或点)的好方法(关于性能)是什么?

例子:

SELECT id, name FROM products WHERE code = '123456789M' OR code = '1123654P';
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016 string-searching

-1
推荐指数
1
解决办法
34
查看次数

SQL 服务停止日期

是否有 Powershell 命令或通过 Windows 知道我的 SQL 服务何时停止

谢谢

在此处输入图片说明

sql-server sql-server-2016

-1
推荐指数
1
解决办法
61
查看次数

订购分区表的最佳方式是什么?

从分区表中获取有序数据的最有效方法是什么?

我有这样的疑问:

SELECT TOP (4000)
*
FROM dbo.MS
ORDER BY MANDT
, MBLNR
, MJAHR
, ZEILE
Run Code Online (Sandbox Code Playgroud)

表按 MBLNR 分区。

执行计划:https://www.brentozar.com/pastetheplan/? id=Bkhv5g5EF

是否有任何选项可以从执行计划中删除排序?

建表语句:

CREATE TABLE [dbo].[MS]
(
    [MANDT] [NVARCHAR](3) NOT NULL
    , [MBLNR] [NVARCHAR](10) NOT NULL
    , [MJAHR] [NVARCHAR](4) NOT NULL
    , [ZEILE] [NVARCHAR](4) NOT NULL
    , [LINE_ID] [NVARCHAR](6) NOT NULL
    , [PARENT_ID] [NVARCHAR](6) NOT NULL
    , [LINE_DEPTH] [NVARCHAR](2) NOT NULL
    , [MAA_URZEI] [NVARCHAR](4) NOT NULL
    , [BWART] [NVARCHAR](3) NOT NULL
    , [XAUTO] [NVARCHAR](1) NOT NULL
    , [MATNR] …
Run Code Online (Sandbox Code Playgroud)

order-by partitioning sql-server-2016

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

NUMA 节点和 SQL Server 性能

我很确定我明白这一点,但我想确定我明白。我们有一个 SQL Server 2016,它运行着 2 个 NumaNode,每个 NumaNode 有 8 个 vCPU。最大并行度 (MAXDOP) 设置为 8。

这对我来说听起来不对。第一个问题:这是一个像我认为的那样糟糕的想法吗?

根据我的研究,我需要告诉他们减少 VM 设置以使其在单个 NUMANode 中运行。我们似乎遇到了一些随机时期,其中运行时间为 170 毫秒的查询现在超时时间为 30 秒以上!因此,我们快速查看了一下,CPU 使用率为 5%,磁盘 I/O 使用率较低,网络使用率合理......基本上,机器处于空闲状态。我们还查找了等待锁的查询,并且没有。我们正在 AG 组中的辅助节点上运行查询(只读查询)

所以,我的猜测是:它已经获得了足够的负载,可以在第二个 NUMANode 中的一个 vCPU 上切换并运行一个有问题的视图(每天运行大约 4,000 次),然后决定执行计划应该始终运行在那个节点。结果是它正在访问的所有数据都缓存在另一个节点的内存中,并且它需要通过节点间链接(远程内存)来获取它,所以它这样做了,但最终速度慢了很多(170次?),并且查询现在都在这个远程链接上运行越来越多的查询......直到它总是超时,因为远程内存已饱和......

这样的分析有效吗?我不想将其作为解决方案来提交,以解释为什么如果这完全不正确,查询会突然及时跳转。而且很难让他们相信 8 个 CPU 会比 16 个 CPU 获得更好的性能。

哦,还有更多证据来支持我的说法:如果我select * into #tmp from myView OPTION (MAXDOP 16)这样做,我的性能变化约为 -5% 到 -12% - 这意味着运行查询所需的时间比我只使用 8 个 vCPU 时要长。然而,情况并非如此。

所以我的问题是:我的分析是否有效?

更新:还有其他一些事情,我从以下位置获得了很多信息:https://codenotary-compliance.medium.com/vmware-vsphere-why-checking-numa-configuration-is-so-important-9764c16a7e73

其次,如果我执行select * from sys.[dm_os_nodes] then 我得到foreign_commited_KB为5,414,260或5 GB,从上面的信息来看,这听起来像是从另一个节点提交的(这很糟糕?)

sql-server vmware sql-server-2016 numa

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

当我的查询中的表都没有使用任何 LOB 数据类型字段时,为什么 IO 统计信息会在工作表上显示大量 LOB 逻辑读取?

我有一个过程,它在数百个数据库中动态运行查询,这些数据库都具有相同的确切架构,并将结果聚合到临时表中。该查询仅涉及 3 个表(每个表都在数百万行的 10 到 100 之间,但我总共只提取了大约 50,000 行数据)。

在查看查询的汇总 IO 统计信息(通过 StatisticsParser.com - 大声喊出 Richie Rump)时,它显示创建了一个工作表,并且该工作表上有大约 550,000 个 LOB 逻辑读取。查询中所有表的常规逻辑读取总数略低于大约 400,000 次逻辑读取。

查询中的实际表都没有使用任何 LOB 数据类型,那么这到底意味着什么,它是否是我查询中瓶颈的潜在来源?

(顺便说一句,我拉回的 50,000 行数据仅相当于大约 3 MB 的数据,但我的查询在第一次运行时需要大约 10 秒才能运行(例如,当表的数据页仍在加载到内存中时) ),然后在后续运行中不到一半的时间,因此尝试查看我是否可以始终接近 <= 4s 基准测试,以及这些 LOB 逻辑读取是否与之相关。)

更新:这是一个类似的示例查询(再次查看它,我可能会发现 LOB 逻辑读取的来源)。

过程签名: sp_StoredProc_ToGetData (@IdsTable TVP (Id INT), @StartDate DateTime, @EndDate DateTime)

sp_StoredProc_ToGetData 内部的查询:

SELECT Id
INTO #IdsTableTemp
FROM @IdsTable;

-- This query is ran using dynamic SQL but for the example simplicity this is just the root …
Run Code Online (Sandbox Code Playgroud)

sql-server statistics dynamic-sql sql-server-2016 performance-tuning

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

如果我从具有(大量记录)的表中删除现有的分区方案/函数会发生什么?

我有几个关于分区的问题。我打算将现有的分区方案/函数放入table1,然后将新的分区方案/函数指向table1. 我知道如何继续这个过程,但在此之前,我想对以下问题提出一些建议/答案:

  1. 如果我删除旧的/现有的分区方案/功能以及表中的数据,旧partition.ndf文件中的数据会发生什么?它们会被删除或修改吗?

  2. 如果我删除旧的/现有的分区方案/功能,表中有数据,表中的数据会发生什么?会不会有记录丢失?

sql-server partitioning sql-server-2016

-4
推荐指数
1
解决办法
5754
查看次数

SQL Server 2016 是否已经可以使用?

所以是时候升级服务器了。我是这家公司的新员工,我们拥有 2008 年到 2014 年的 SQL Server。我真的认为将它们全部升级到 2014 年没有问题,因为它确实有很好的文档记录并且为社区所熟知。它的支持将于 2024 年 7 月 9 日结束,对吗?直接升级到 SQL Server 2016 的原因是什么?

我可以找到很多比较它们的网站,但这些都不是我们现在使用的功能。

我想直接升级到 2016 年,因为它的支持于 2026 年 7 月 14 日结束,但恐怕自 2008/2012 年以来它的查询有很多变化(例如已删除不推荐使用的功能)。

SQL Server 升级顾问是用于进行此类测试的可靠工具吗?

我过去曾将我们的环境(不同公司)从 SQL SERVER 2005/2008 升级到 2014,没有出现任何问题。

并且由于我们的数据库很少(就像每个服务器中不到 10 个),备份/恢复然后到新环境中更安全,对吗?我没有信心进行就地升级。

据我所知,我们不能将数据库直接从 SQL Server 2008 (100) 迁移到 sql server 2016,对吗?

migration upgrade sql-server-2016

-4
推荐指数
1
解决办法
146
查看次数

检查今天是否是第一个月

在我的搜索引擎上,我看到了多个结果来获得一个月的第一天,但​​我想做一些稍微不同的事情。在 SQL 2016 中,我想检查今天GetDate()是否是该月的第一天。

我该怎么做?

ssms t-sql sql-server-2016

-4
推荐指数
1
解决办法
45
查看次数