标签: sql-server

Force_legacy_cardinality_estimation 提示问题

  1. force_legacy_cardinality_estimation 提示是否会更改整个查询(或存储过程)的基数或仅更改其应用的代码部分?(例如,如果存储过程中有多个 SELECT 语句,但提示仅在其中一个 SELECT 语句上。)
  2. 您可以在视图中使用提示吗?

sql-server sql-server-2019

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

如何在管理工作室选项卡中重置会话?

在管理工作室选项卡中,假设我运行创建临时表的代码。

现在,如果我重新运行此代码,则会出现临时表已存在的错误。我可以打开一个新选项卡并运行此代码。发生这种情况是因为每个选项卡都是一个新会话。

我知道使用 drop 作为代码的初始部分是一种解决方案。但是,有什么方法可以在同一窗口中获取新会话(或重置会话),以便在重新运行代码时不必创建新选项卡?

sql-server ssms

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

如何验证 SQL Server 是否启用了强制加密

我想知道是否有人知道查询 SQL Server 的“强制加密”是否设置为 true 的方法。

我知道我可以检查sys.dm_exec_connections当前连接是否已加密,但这并不能真正得到我想要的东西。false如果客户端请求加密,即使设置为“强制加密”,所有连接仍然可以加密。

我正在构建一个报告,扫描我们环境中的所有 SQL 服务器,以针对我们的最佳实践设置进行测试,以便我们可以修复错误配置的系统。由于报告将按计划运行,依赖sys.dm_exec_connections可能会给我一种错误的安全感,因为在报告运行时所有连接都可以加密,但五秒钟后某些连接未加密。我们的目标是尝试让所有 SQL 服务器强制加密,然后能够报告异常情况。

sql-server

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

展开日期范围

我有下表,其中包含以下数据:

DECLARE @MyActions TABLE (ActionId INT NOT NULL, ActionDate DATETIME NOT NULL)

INSERT INTO @MyActions VALUES (1, '2021-08-01 01:00:00')
INSERT INTO @MyActions VALUES (2, '2021-08-02 02:00:00')
INSERT INTO @MyActions VALUES (3, '2021-08-03 03:00:00')
INSERT INTO @MyActions VALUES (4, '2021-08-04 04:00:00')
Run Code Online (Sandbox Code Playgroud)

如何在不使用慢表值函数的情况下将每个 ActionID 分解为 10 个附加记录(当前 ActionID 的日期前 5 天和日期后 5 天)?

ActionID = 1 应该爆炸到 11 个总记录(没有时间),Action 2 应该爆炸到 11 个总记录(没有时间),依此类推

分解结果集

DECLARE @MyActions TABLE (ActionId INT NOT NULL, ActionDate DATETIME NOT NULL)

INSERT INTO @MyActions VALUES (1, '2021-08-01 01:00:00') …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014 date-math

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

保留每个表中每个值的完整历史记录

您将如何保留数据库中所有表的每个值的完整历史记录,可以使用特定日期(对于所有表的每一列)进行查询?我的意思是:人们只需要指定一个日期,该日期的值是“活动”或“有效”。

以一种愚蠢的方式,我会在每个表中添加一个“有效期开始日期”列。而不是复制每个值,我只会复制更改的值,并将所有其他列设置为 NULL。然而,这个解决方案真的很糟糕,因为它使查询复杂化,即使它占用的空间更少。

是否有一种特定的技术(我在 Microsoft 世界中)可以做到这一点,或者有一种特定的方法来为数据库建模来做到这一点(除了为每个表的每一列创建一个表)?

我想提一下,我不是 DBA 而是开发人员。赞!赞!

database-design sql-server t-sql

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

是否可以更改驱动器名称/标签(不是驱动器号!)

我意识到这可能是一个简单的问题,但如果我包含 SQL Server,我的搜索只会返回驱动器号或数据库名称的结果。请随时向我指出现有的文章或答案,并提前道歉:)

我继承了一个环境,其中包含多个支持多个 SharePoint 2013 和 2016 场的 SQL Server 2014 和 2016 服务器(也有一些是集群服务器)。以前的 SA 为驱动器命名/标记了一些相当模糊的名称,我想通过重命名驱动器来避免自己继续混淆每个包含的内容。这是一个坏主意吗?我似乎无法在我的环境中找到任何专门提到驱动器名称的东西,一切似乎都选择了驱动器号,在某些情况下,驱动器名称被呈现为信息。

驱动器名称只是一个描述,实际上并没有将驱动器本身识别为任何系统,我对吗?

sql-server sharepoint sql-server-2014 sql-server-2016

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

减少主键索引的大小

我正在使用 Azure SQL DB,并注意到我最大的数据库之一似乎有一个总大小为 6Gb 的主键索引。它是uniqueidentifier. 但是,在任何给定时间点,表中的总行数仅约为 78k 行。

该表存储出站电子邮件和短信,因此它会定期填满并清空。我们还对整个数据库进行每周索引维护,因此我试图理解为什么这个 PK 索引看起来远远大于其应有的值。

在某些情况下,HTML 电子邮件的大小几乎为 50KB。

根据我自己的本地测试,从该表中删除行似乎确实减少了 PK 的大小,但这似乎不会在生产数据库上发生。

然后我有什么选择来减少这个索引大小并释放我想象的大量未使用的空间。

sql-server primary-key disk-space azure-sql-database

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

sql server是否锁定整个表并在表为堆时保持锁定状态?

无论 where 子句如何;

当表是堆(没有聚集索引)时,选择查询是否会使sql server锁定所有行,直到它完成读取所有行?

在具有聚集索引的表的情况下,sql server将逐一锁定行并在读取该行后立即释放它们?

有关此主题的任何参考链接都会非常有帮助。

sql-server heap sql-server-2019

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

为什么添加 WHERE 子句会破坏我的工作查询,并出现错误“由于定义的提示,查询处理器无法生成查询计划...”?

我有以下(愚蠢地简化的)查询,它利用两个引用同一个表的 CTE 并将它们相互连接:

WITH CTE1 AS
(
    SELECT dbo.RemoveNonNumericCharacters(PhoneNumber) AS PhoneNumberCleaned
    FROM PhoneNumbersTable
    GROUP BY dbo.RemoveNonNumericCharacters(PhoneNumber)
),
CTE2 AS
(
    SELECT CTE1.PhoneNumberCleaned
    FROM CTE1
    INNER HASH JOIN PhoneNumbersTable
        ON CTE1.PhoneNumbersCleaned = dbo.RemoveNonNumericCharacters(PhoneNumbersTable.PhoneNumber)
    WHERE PhoneNumbersTable.AreaCode IN (718, 212)
)

SELECT PhoneNumberCleaned
FROM CTE2
Run Code Online (Sandbox Code Playgroud)

注意HASH JOIN里面发生的事情CTE2。到目前为止,这一切都运作良好。

如果我将以下WHERE子句添加到最终SELECT查询中,那么我的整个查询现在变为:

WITH CTE1 AS
(
    SELECT dbo.RemoveNonNumericCharacters(PhoneNumber) AS PhoneNumberCleaned
    FROM PhoneNumbersTable
    GROUP BY dbo.RemoveNonNumericCharacters(PhoneNumber)
),
CTE2 AS
(
    SELECT CTE1.PhoneNumberCleaned
    FROM CTE1
    INNER HASH JOIN PhoneNumbersTable
        ON CTE1.PhoneNumbersCleaned …
Run Code Online (Sandbox Code Playgroud)

sql-server hints execution-plan errors sql-server-2016

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

需要确定大型事务所需的日志空间(MSSQL)

我需要更新分区表中的数十亿行;更新也可能会在分区之间移动数据。我试图弄清楚作为单个事务执行此操作需要多少额外的日志空间(我意识到我最好批量处理这项工作,但我试图避免这种情况)。我想尝试一个较小的集合,这样我就可以看看它在规模上需要什么。是否有任何我可以监控的系统管理视图可以帮助我解决这个问题?

sql-server transaction-log

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