标签: sql-server

当两个 FK 列需要在同一个表中匹配自己时的参照完整性?

可能我的设计是错误的,或者只是有更好的方法。我将使用一个非常简单的例子:

    --------- dbo.Book----------
   |                            |
   |  BookID int identity (1,1) |
   |  ShelfID int FK            |--
    ----------------------------   |
                                   |
    --------- dbo.Row-----------   |    
   |                            |  |    
 --|  RowID int identity (1,1)  |  |    
|   ----------------------------   |    
|                                  |        
|   -------- dbo.Shelf----------   | 
|  |                            |  |
|  |  ShelfID int identity (1,1)|--
 --|  RowID int FK              |
    ----------------------------
Run Code Online (Sandbox Code Playgroud)

足够简单。

但是如果我想分配一个没有架子的行怎么办?也许我们还知道行而不是货架:

    --------- dbo.Book----------
   |                            |
   |  BookID int identity (1,1) |
   |  RowID int FK              | <-- New
   |  ShelfID int FK …
Run Code Online (Sandbox Code Playgroud)

foreign-key database-design sql-server referential-integrity

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

运行 sp_BlitzCache (v5.2) 时出错

我已经从 First Responder Kit 安装了 sp_BlitzCache(和其他),并且收到以下错误:

EXEC sp_BlitzCache;
Run Code Online (Sandbox Code Playgroud)

消息 208,级别 16,状态 0,过程 sp_BlitzCache,第 3878 行 [批处理开始第 0 行]

无效的对象名称“#trace_flags”。

所有其他脚本似乎都按预期工作,但我不确定我是否遇到了缺陷,或者它是否与我的使用和/或配置有关。

同样值得注意的是,该过程确实返回了 10 个结果,但随后因上述错误而失败。

我已经在网上和通过存储过程本身做了一些搜索。虽然我很困惑#trace_flags临时表似乎不像其他人那样创建,但我在 GitHub 上找不到似乎表明它曾经有过的代码..所以因为我认为它一直在为其他人工作,所以它导致我相信我假设错误的事情和/或错误地运行它。

  • 服务器: Microsoft SQL Server 标准版
  • 版本: 10.50.6220.0(SQL Server 2008 R2)

先感谢您!无论是为了帮助,还是为了任何参与开发急救箱的人。

sql-server sp-blitzcache

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

从左表返回所有数据

我的左表比右表包含更多的商店名称。我以为快速左连接会返回该数据集,但无济于事!

Data In From 子句有最多的选项,我想显示所有这些 Data In Left Join 子句有一些但不是我想显示的所有选项

我创建了 CTE 来获取 SUM() 并将数据拉到主查询中存在于左连接表中

这是我使用的查询,它没有给出我想要的结果。

;With DataFromOne As
(
    Select   StoreName
             ,DataFromOne = Count(ramalad)
    FROM     DataFromOne
    WHERE    EntryDate BETWEEN '20170101' AND '20170331'
    GROUP BY StoreName
)
Select   ec.StoreName
         ,[Emp Count] = COUNT(Employee)
         ,[PT Count] = COALESCE(ec.DataFromOne,0)
FROM     DataFromOne ec
LEFT OUTER JOIN DataFromTwo fji
ON       ec.StoreName = fji.StoreName
WHERE    fji.saleDate BETWEEN '20170101' AND '20170331'
GROUP BY ec.StoreName, ec.DataFromOne
ORDER BY ec.StoreName ASC;
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2008-r2

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

sp_BlitzIndex 给出了自相矛盾的建议

我使用了 Brent 的 sp_BlitzIndex 并收到了有趣的结果。对于第一次运行,它建议我创建一个索引。我已经完成并再次执行。这次它告诉我们新创建的索引太激进了。有了这个逻辑,DBA 会感觉就像赛马在兜圈子。布伦特,如果我是一匹疯狂的盲马,请给我指路。

sql-server sp-blitzindex

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

什么是 SQL Server 分发服务器?

这个问题(SQL Server 事务复制分发器)提到了一篇博客文章HERE,其中讨论了分发数据库如何与发布者和订阅者相关的工作方式。看起来很清楚。

这是Distributor一个成熟的 SQL Server 实例吗?我知道它可以在单独的服务器上运行,所以看起来就像这样。如果不是,分发服务器和 SQL Server 实例之间有什么区别?

我从这篇文章中猜想,发布者的事务日志存储在分发数据库中,然后由订阅者读取。这就是所谓的“事务复制”吗?还有其他类型的复制吗?

replication sql-server

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

将 2GB csv 文件导入 SQL Server 2008 的快速方法

我是数据库新手,我正在使用 SSMS 2008 R2 从.csv文件中导入 2GB 的数据。

导入大约需要 115 分钟。

任何人都可以让我知道执行此导入的更好方法。

sql-server ssms import csv

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

登录 过去 1 个月内未使用

我需要创建一个查询,该查询可以获取上个月未使用的登录详细信息。我尝试了几种方法,如扩展事件和审计跟踪。但是我无法获得上个月未使用的登录列表,请帮我解决这个问题。

security sql-server audit logins

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

当 value 为 null 时,对 WHERE 语句中变量的行为感到困惑

我有一个像(SQLServer 2008)的表:

CREATE TABLE [dbo].[my_test_table](
    [productId] [int] NOT NULL,
    [purchaseId] [bigint] NOT NULL,
    (some other columns....),
 CONSTRAINT [PK_my_test_table] PRIMARY KEY CLUSTERED 
(
    [productId] ASC,
    [purchaseId] ASC
))
Run Code Online (Sandbox Code Playgroud)

大约有 1000 万行。

我想要一个查询,返回产品的总行数,或者如果产品未指定,则返回所有产品的总行数。就像是:

declare @productId int

set @productId = 320

select count(*)
from my_test_table t with(nolock)
where productId = @productId
or @productId is null
Run Code Online (Sandbox Code Playgroud)

问题是查询比等效查询花费时间要多得多:

select count(*)
from my_test_table t with(nolock)
where productId = 320
or 320 is null
Run Code Online (Sandbox Code Playgroud)

我们如何解释这种行为?

以下是执行计划: 在此处输入图片说明

sql-server-2008 sql-server t-sql

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

LSN 的三个部分是什么?

我很好奇日志序列号 (LSN) 的 3 部分是什么以及它们是如何生成的。

日志序列号是一个不断增加的、由三部分组成的编号,它唯一地定义了日志记录在事务日志中的位置。来源

我环顾四周,发现至少有一个答案说我“不应该关心这些是如何生成的”,但我仍然想知道。

如果我运行,DBCC FILEHEADER ([AdventureWorks2014], 1)我得到的结果会显示我的 AdventureWorks 中一些重要的 LSN

最大LSN

45000000001600001

第一LSN

44000000084000074

重做起始LSN

45000000001600001

它们似乎确实有 3 个不同的部分,它们是什么,它们是什么意思,它们是如何生成的?

sql-server logs transaction-log

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

并行性的 TDE 性能和成本阈值

是否有任何文档、测试数据或其他证据表明在数据库上启用 TDE 时并行成本阈值 (CTP) 设置可能会影响性能?在不深入研究所有细节的情况下,我们发现在数据库上启用 TDE 后,基准测试出现了一些显着的性能下降,我们正在寻找可能产生影响的任何设置。CTP 当前设置为默认值 5,我知道这并不理想,所以请抵制对我进行惩罚的冲动。

我们还将添加 CPU 并进一步测试,但如果我们可以通过更改 CTP 或其他设置获得更好的性能,那当然比添加 CPU 更好(由于硬件成本以及每个 CPU 的 SQL Server 许可) .

我正在推动更改 CTP 并再次测试,但我希望看看是否有人已经对其进行了测试,以便我们可以相应地优先考虑要测试的更改。

谢谢!

sql-server transparent-data-encryption sql-server-2014

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