Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

2
有多种情况的情况
我需要根据几种条件从select语句更改返回值。我尝试过这样的事情: ,CASE i.DocValue WHEN 'F2' AND c.CondCode IN ('ZPR0','ZT10','Z305') THEN c.CondVal ELSE 0 END as Value 为什么它不起作用?推荐的方法是什么?接下来将有几个WHEN条件。 谢谢
14 sql-server 

2
Varchar的行为,末尾有空格
当我将Varchar与空格一起使用时,它最后会忽略空格。 例如: declare @X varchar(50) 这个... set @X= 'John' ...是相同的... set @X= 'John ' 它认为这些是相等的。如何使系统将它们识别为不同的?

2
查找哪个会话持有哪个临时表
我们有一个SQL Server 2005数据库,临时数据库已满。通过进入SQL Server Management Studio,我可以看到tempdb中的所有临时表。是否可以判断哪个会话正在保存哪个临时表?理想情况下,该查询将列出每个会话使用的临时表。 谢谢,

5
截断表需要什么权限?
我有一个对数据库具有以下权限的SQL帐户: db_executor您看到此帐户是该帐户成员的角色是通过以下脚本创建的: CREATE ROLE [db_executor] AUTHORIZATION [dbo] GO GRANT EXECUTE TO [db_executor] GO 当我运行一个select,update,insert或delete放在桌子上,它工作正常。当我尝试到truncate表时,它给了我这个错误信息: 无法找到对象“ TableName”,因为该对象不存在或您没有权限。 该帐户缺少什么权限?

1
查找对特定列的依赖关系(现代方式,不使用sysdepends)
我需要查找所有不仅消耗特定表,而且消耗表中特定列的视图和存储过程。 以下“似乎”可以正常工作,但是使用此方法时要注意许多警告(由于各种原因不可靠,即将被弃用,等等): SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName, (SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type FROM sysobjects so INNER JOIN syscolumns sc ON so.id = sc.id INNER JOIN sysdepends sd ON so.id = sd.depid and sc.colid = sd.depnumber WHERE object_name(so.id) = 'MyTableName' AND sc.name = 'MyColumnName' …
14 sql-server 

3
如何最好地维护SQL日志文件大小
我有点像是新的DBA,并且正在管理一个活动量很大的SQL Server 2012实例。我正在完全恢复模式下运行,因为我们需要时间点恢复。 现在,我每天凌晨5点对数据库和日志进行完整备份。一些日志文件已膨胀到300GB,即使备份后它们也不会减小大小。我可以通过运行类似于以下内容来减小它们的尺寸: BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn'; DBCC ShrinkFile([db1_log], 0); 当我检查备份文件的LSN时,会看到类似以下内容的内容: RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn' FirstLSN: 15781000014686200001 SecondLSN: 15802000000665000001 RESTORE headeronly FROM DISK = …


1
部分覆盖范围谓词的垂直度估计
目前,我正在尝试弄清楚SQL Server如何评估部分覆盖直方图步骤的范围谓词的基数。 在Internet上,在针对阶跃统计值和阶跃内统计值进行基数估计时,我遇到了一个类似的问题,保罗·怀特(Paul White)给出了一个相当有趣的答案。 根据Paul的回答,用于估计谓词> =和>的基数的公式(在这种情况下,我只对至少120的基数估计器模型感兴趣): 对于>: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * (F * (DISTINCT_RANGE_ROWS - 1))) 对于> =: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * ((F * (DISTINCT_RANGE_ROWS - 1)) + 1)) 我根据使用TransactionDate列的范围谓词以及“ 20140614”和“ 20140618”之间的日期时间范围,在AdventureWorks2014数据库的[Production]。[TransactionHistory]表上测试了这些公式的应用。 此范围的直方图步骤的统计信息如下: 根据公式,我计算出以下查询的基数: SELECT COUNT(1) FROM [AdventureWorks2014].[Production].[TransactionHistory] WHERE [TransactionDate] BETWEEN '20140615 00:00:00.000' AND '20140616 00:00:00.000' …

1
为什么此RX-X锁没有出现在扩展事件中?
问题 我有一对可串行隔离的查询,它们导致RX-X锁定。但是,当我使用扩展事件来观察锁获取时,RX-X锁获取从未出现,它仅被释放。它从何而来? 再现 这是我的桌子: CREATE TABLE dbo.LockTest ( ID int identity, Junk char(4) ) CREATE CLUSTERED INDEX CX_LockTest --not unique! ON dbo.LockTest(ID) --preload some rows INSERT dbo.LockTest VALUES ('data'),('data'),('data') 这是我的问题批次: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRAN INSERT dbo.LockTest VALUES ('bleh') SELECT * FROM dbo.LockTest WHERE ID = SCOPE_IDENTITY() --ROLLBACK …

1
仅物理checkdb失败,但完整的一个成功完成
我正在执行带有physical_only选项的checkdb,并且失败,并显示以下多个错误: 消息8965,级别16,状态1,第1行 表错误:对象ID 1557580587,索引ID 1,分区ID 72057594088456192,分配单元ID 72057594177454080(类型为行内数据)。页面(1:13282192),插槽3,文本ID 6370769698816的行外数据节点由页面(0:0),插槽0引用,但未在扫描中看到。消息8965,级别16,状态1,第1行 表错误:对象ID 1557580587,索引ID 1,分区ID 72057594088456192,分配单元ID 72057594177454080(类型为行内数据)。页面(1:13282192)插槽5的行外数据节点由页面(0:0)插槽0引用文本ID 6370769764352,但在扫描中未看到。 CHECKDB在表'TableX'(对象ID 1557580587)中发现了0个分配错误和5255个一致性错误。CHECKDB在数据库'DatabaseX'中发现0个分配错误和5255个一致性错误。repair_allow_data_loss是DBCC CHECKDB(DWH_LAND)发现的错误的最低修复级别。 但是完整的checkdb是成功的: CHECKDB在数据库'DatabaseX'中发现0个分配错误和0个一致性错误。DBCC执行完成。如果DBCC打印了错误消息,请与系统管理员联系。 TableX大约有20万行,并在其上具有群集的列存储索引。 我们正在使用以下版本的SQL Server: Microsoft SQL Server 2017(RTM-CU13)(KB4466404)-14.0.3048.4 我应该担心吗?

2
显示估计的执行计划会生成CXPACKET,PAGELATCH_SH和LATCH_EX [ACCESS_METHODS_DATASET_PARENT]等待
我在4个vCPU VM运行Microsoft SQL Server 2016 SP2-CU6(13.0.5292.0)与max degree of parallelism设置为2和cost threshold for parallelism设置为50。 早晨,当尝试显示SELECT TOP 100查询的估计执行计划时,我遇到了大量的等待,渲染估计计划的操作需要花费几分钟,通常是5到7分钟。同样,这不是查询的实际执行,这只是显示“ 估计的执行计划”的过程。 sp_WhoIsActive将显示PAGEIOLATCH_SH等待或LATCH_EX [ACCESS_METHODS_DATASET_PARENT]等待,当我在操作期间运行Paul Randal的WaitingTasks.sql脚本时,它将显示CXPACKET等待,而工作线程显示PAGEIOLATCH_SH等待: *资源描述字段= exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen 工作线程看起来是将整个stats表都放入内存中(因为从Paul Randal的查询中显示的那些页号以及后续页号都指向该stats表的集群键)。一旦计划恢复,即使在stats剩余的各种记录(我认为由于类似查询的查找操作而将其拉出)的情况​​下,大部分缓存都从高速缓存中消失之后,一天中的剩余时间基本上都是瞬时的。 如果查询实际上是使用SCAN运算符的计划执行的,我会期望出现这种初始行为,但是为什么在评估执行计划时才这样做(如上面链接的计划所示),以达到SEEK运算符呢?我该怎么办(除了在办公时间之前运行此语句,以便适当地缓存我的数据),以帮助提高此处的性能?我假设一对覆盖索引将是有益的,但是它们真的可以保证行为的任何改变吗?我必须在这里在一些存储和维护窗口限制内工作,并且查询本身是从供应商解决方案生成的,因此,此时欢迎任何其他建议(除了更好的索引编制)。

1
SQL Server 2017(包括旧版本)是否支持8k磁盘扇区大小?
磁盘驱动器(松散地说不仅包括旋转介质,还包括非旋转介质[SSD,NVMe等])正在以其基本格式和硬件不断发展。其中一部分是从512字节物理扇区大小到4k物理扇区大小的“增强”,这改变了磁盘上的布局(512n,512e,4kn)。 下一个发展趋势是使用8k物理扇区大小,一些制造商已开始生产该物理扇区,并在生产中进行设置。下一步,Windows是否支持8k扇区大小的磁盘?SQL Server是否关心扇区大小?

1
SET NOCOUNT升级后处理SQL调用时出错
我们正在使用新服务器和Microsoft SQL Server的更新版本升级测试环境,但遇到了问题。 在新服务器上,执行某些存储过程时,我们的旧代码将获得“关闭对象时不允许操作”。该消息从未出现在旧服务器上。当我们对其进行跟踪时,可以通过添加SET NOCOUNT ON;到存储过程中来解决该问题。 我查看了数据库的默认设置,没有发现与默认设置相关的其他设置(SQL Server 2008与SQL Server 2014)。 我应该在什么条件下解决全局问题,而无需增加SET NOCOUNT ON一千个存储过程?


3
为什么选择此查询的所有结果列比选择我关心的一列要快?
我有一个查询,其中使用select *不仅读取次数少得多,而且比使用占用的CPU时间少得多select c.Foo。 这是查询: select top 1000 c.ID from ATable a join BTable b on b.OrderKey = a.OrderKey and b.ClientId = a.ClientId join CTable c on c.OrderId = b.OrderId and c.ShipKey = a.ShipKey where (a.NextAnalysisDate is null or a.NextAnalysisDate < @dateCutOff) and b.IsVoided = 0 and c.ComplianceStatus in (3, 5) …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.