小编Pau*_*ite的帖子

确定我们的数据库服务器使用了多少个 CPU

我们安装了 Microsoft SQL Server 2016 Web Edition 服务器的服务器运行速度非常慢。

我们正在考虑增加其许可的核心数量。但是,我们需要检查数据库当前使用了多少个 CPU 核心。我们的 Windows Server 2016 有 16 核(双)CPU。

sql-server sql-server-2016

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

避免重复的 CASE 表达式

SELECT x, y, z,
CASE
WHEN COUNT (PH.header_id) OVER (PARTITION BY PL.header_id)
    NOT IN (null,0) THEN L_Count
ELSE COUNT (PH.header_id) OVER (PARTITION BY PL.header_id)
END as quantity
Run Code Online (Sandbox Code Playgroud)

有没有更有效的写法?

我非常清楚它在一张大桌子上执行了两次计数。

不幸的是,我无法发布查询计划,因为我正在使用的用户帐户正在等待 SHOWPLAN 权限。

NOT IN 子句是一个附带问题。感谢您提供有关改进方法的评论反馈,但问题的焦点是重复计数。

sql-server case query-performance

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

查询以查找指定日期之间的活跃天数(状态 = 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
查看次数

sp_BlitzIndex 是否使用查询存储数据?

SQL Server 2019

  1. 运行时sp_BlitzIndex生成的结果是否使用查询存储数据?尝试了解查询存储是否影响sp_BlitzIndex报告。

  2. sp_BlitzIndex在其报告中有多项建议,我试图了解应遵循哪些步骤sp_BlitzIndex来验证是否需要这样的索引。它应该遵循两者还是其中之一?sp_BlitzCache/sp_BlitzQueryStore 一个例子是其中一行的使用 - 603 uses; Impact: 100.0%; Avg query cost: 74.4459 在看起来很棒的纸上,在复制并粘贴索引的 TSql 之前,我如何才能准确地了解哪些查询会使用建议的索引?(所谓的 603 使用)。

在索引调整过程中有点迷失了自己,因为感觉每个命令都只是重定向到另一个命令,不知道我应该在哪里停止并采取行动哈哈。

sql-server sp-blitzindex index-maintenance

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

如何告诉 Microsoft SQL Server Management Studio 数据库重命名必须完全完成

我有一个旧的数据库副本。我通过备份从客户系统中检索它并将其恢复到我的本地 PC 上。我想查看同一数据库的最新副本。显然我不能这样做,在同一个数据库上工作,因为我的旧副本将被覆盖,所以我首先将我的数据库从“Firm_Customer”重命名为“Firm_Customer_orig”。

现在我想恢复数据库的最新副本,但失败了,如以下错误消息中所述:

System.Data.SqlClient.SqlError:无法覆盖文件“C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\Firm_Customer.mdf”。它正在由数据库“Firm_Customer_orig”使用。(Microsoft.SqlServer.SmoExtended)

我期望数据库从“Firm_Customer”重命名为“Firm_Customer_orig”也会导致文件“C:\Program Files\Microsoft SQL Server...\Firm_Customer.mdf”的重命名,但显然数据库重命名只是“部分” ”。

有没有办法强制数据库重命名以执行完整重命名(与“Firm_Customer”相关的所有内容都必须重命名为“Firm_Customer_orig”)?

哦,在我忘记之前:我正在使用 Microsoft SQL Server Management Studio,版本“v18.12”。

提前致谢

sql-server ssms restore rename

0
推荐指数
2
解决办法
557
查看次数

在内联视图中设置时Oracle是否保证最终输出行顺序

此查询基于 2 个表,其中某些行PerfData1具有多个子记录。行不重复,但有些id行重复。我只需要获取其中的 1 行,这也是一个分页查询,它需要获取总数或现有项目以及最终子集。

查询工作正常。但是,我不确定在内联视图(内部ORDER BY)中设置的顺序是否会保留在最终输出中。到目前为止,没有看到任何偏差。但我记得在 SQL Server 世界中这是不能保证的,因此我需要 2 个ORDER BY子句。

    SELECT 
        All_Results_Table.*
    FROM
    (
        SELECT 
            Rownum_Table.*,
            COUNT(*) OVER() as sys___countAllFoundRecords,
            ROWNUM sys___outputRownum
        FROM 
        (
            SELECT 
                ROW_NUMBER() OVER(PARTITION BY PerfData1.id ORDER BY PerfData1.id) AS sys___multivalueRowSequence, -- This is OPTIONAL when we DON'T want dupe IDs
                ROW_NUMBER() OVER(order by 1) AS sys___innerRowNumber,
                PerfData1.id,
                PerfData1.c1 item,
                PerfData2.c1 subitem
            FROM 
                PerfData1 inner join 
                PerfData2 on PerfData1.id = PerfData2.fkId
            WHERE (1 = 1) 
            ORDER …
Run Code Online (Sandbox Code Playgroud)

oracle order-by

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

如果 FK 相同,则合并行值

我有一张下表

PK 姓名 氟肯
01 ABC 01FK
02 BCA 01FK
03 出租车 02FK
04 XYZ 03FK
05 yzx 02FK

我想生成一个新表,其中 FK 为主表,其余列基于 FK 合并。所以最终结果看起来像这样:

氟肯 姓名
01FK 美国广播公司、英国广播公司
02FK 驾驶室,yzx
03FK XYZ

pivot

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

即使与另一个列值部分匹配,也将特定字符串替换为空白

我有一个场景,如果部分单词与另一列匹配,则从一组逗号分隔的字符串中替换整个字符串。

我发现用文字解释非常复杂,因此我通过包含各种示例的屏幕截图进行了解释。

请帮助我使用存储过程或函数或查询来获取所需结果列中的结果,如下面的屏幕截图所示。

截屏

我尝试使用STRING_SPLIT函数来分割值并连接表。我对解决这个问题的逻辑感到震惊。

sql-server string-manipulation

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

SQL Server 究竟如何执行 UPDATE 语句?

下面的两个会话尝试更新同一行的场景由 Paul White 提供。

场景一:

  1. 会话 1U在读取时获取基表行的锁。
  2. 会话 2 阻塞,等待获取U基表中的同一行。
  3. 会话 1 将值设置为 10 并提交。
  4. 会话 2 获取了它的U锁并且发现没有什么可做的,因为现在 Value != 0。

结果:值设置为 10。

根据 Paul 的说法,会话 2 已经找到了需要更新的行,但它被阻止了。当阻塞消失并且会话 2 获得 U 锁时,它需要再次检查条件吗?我理解正确吗?对我来说这有点奇怪。会话找到了这一行,这是因为它评估了导致识别该行的过滤器。为什么在实际更新之前需要再次检查条件?

sql-server update

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

为什么sql server更喜欢索引扫描而不是查找?

我的桌子是这样的:

    CREATE TABLE [dbo].[ClosedTaskCustomFields](
    [ClosedTaskId] [uniqueidentifier] NOT NULL,
    [CustomFieldId] [uniqueidentifier] NOT NULL,
    [Value] [nvarchar](450) NULL
    ... 
 CONSTRAINT [PK_ClosedTaskCustomFields] PRIMARY KEY CLUSTERED 
(
    [ClosedTaskId] ASC,
    [CustomFieldId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我也有这样的索引用于连接 ClosedTask 表:

CREATE NONCLUSTERED INDEX [IX_ClosedTaskCustomFields_ClosedTaskId] ON [dbo].[ClosedTaskCustomFields]
(
    [ClosedTaskId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, …
Run Code Online (Sandbox Code Playgroud)

sql-server execution-plan

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