示例架构:
CREATE TABLE [dbo].[Base](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Option1ID] [int] NULL,
[Option2ID] [int] NULL,
[Option3ID] [int] NULL,
[Option1Name] [varchar] NULL,
[Option2Name] [varchar] NULL,
[Option3Name] [varchar] NULL,
[Option1LName] [varchar] NULL,
[Option2LName] [varchar] NULL,
[Option3LName] [varchar] NULL,)
Run Code Online (Sandbox Code Playgroud)
有没有办法让结果显示如下:
ID | OptionID | OptionName | OptionLName
Run Code Online (Sandbox Code Playgroud)
我尝试使用 UNION ALL 来实现这一点,但这意味着在我的示例中,在同一行上重复 3 次,在我的实际问题中,我必须这样做 10 次。由于遗留代码,我无法对表进行规范化。有没有办法只遍历 Base 行一次?
在生产 SQL Server 2012 数据库上,我们得到了一些我不明白的奇怪锁定统计信息。
@@lock_timeout 设置为 -1
如何在没有锁定等待的情况下获得锁定超时?我最近添加了一些缺失的索引,这会影响这些数字吗?
几天前,我向 SQL Server 2012 数据库添加了几个索引以帮助提高性能。今天,我们的带有 TempDB 的分区空间不足。TempDB 从不到 10 GB 增加到 38 GB。运行后:
SELECT SUM(unallocated_extent_page_count) AS [free pages],
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
Run Code Online (Sandbox Code Playgroud)
看起来我在 tempDB 中有大约 22GB 的可用空间。我知道 TempDB 用于执行 SQL Server 完成的所有排序,但现在它导致了空间问题。如果 TempDB 有那么多可用空间,为什么它会抱怨服务器上的空间不足?我能做些什么来防止这个问题再次发生?
我在 SQL Server 2012 中有一个具有以下简化架构的表,我需要定义一个查询来获取最新的记录,然后返回它们之间间隔少于 30 天的记录链。一旦出现超过 30 天的差距,链条就会被打破,不再继续。重叠应该延续链条。有没有办法在不诉诸缓慢和递归的情况下解决这个问题?
ID (int)
Arrival (datetime)
Departure (datetime)
Run Code Online (Sandbox Code Playgroud)
ID Arrival Departure
1 2009-04-19 2009-04-28
2 2009-04-27 2009-05-21
3 2009-06-11 2009-07-01
4 2009-07-19 2009-07-24
5 2004-04-19 2004-04-21
6 2009-02-28 2009-03-05
Run Code Online (Sandbox Code Playgroud)
ID Arrival Departure
4 2009-07-19 2009-07-24
3 2009-06-11 2009-07-01
2 2009-04-27 2009-05-21
1 2009-04-19 2009-04-28
Run Code Online (Sandbox Code Playgroud)