标签: sql-server-2012

创建索引是否需要停机

我们有一张包含几百万行的生产表。我们运行了这个查询,它冻结了我们的数据库,

USE ExampleDatabase

GO
CREATE NONCLUSTERED INDEX IX_Table1_URL
ON [dbo].[Table1] ([URL])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table1_LastModified
ON [dbo].[Table1] ([LastModified])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table2_URL
ON [dbo].[Table2] ([URL])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table2_LastModified2
ON [dbo].[Table2] ([LastModified2])
GO
Run Code Online (Sandbox Code Playgroud)

我是一名对索引知识非常有限的开发人员,我不知道从哪里开始,只是添加 Table1 和 Table2 都有数百万行。

sql-server sql-server-2012

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

如何通过查询在sql中的日期列中添加循环?

如果ID = 01234并且此 ID 在一个月内进行了 3 次交易,如下所示:

***DAY_no              Balance*** 
   1/1/2018              5000
   10/1/2018             10000
   15/1/2018             12000
Run Code Online (Sandbox Code Playgroud)

我想要这样的数据:

***DAY_no              Balance*** 
   1/1/2018              5000
   2/1/2018              5000
   3/1/2018              5000
   4/1/2018              5000
   5/1/2018              5000
   6/1/2018              5000
   7/1/2018              5000
   8/1/2018              5000
   9/1/2018              5000
   10/1/2018             10000
   11/1/2018             10000
   12/1/2018             10000
   13/1/2018             10000
   14/1/2018             10000
   15/1/2018             12000
   16/1/2018             12000
   17/1/2018             12000
   18/1/2018             12000
   19/1/2018             12000
   20/1/2018             12000
   21/1/2018             12000
   22/1/2018             12000
   23/1/2018             12000
   24/1/2018             12000
   25/1/2018             12000
   26/1/2018             12000
   27/1/2018             12000
   28/1/2018             12000
   29/1/2018             12000
   30/1/2018             12000 …
Run Code Online (Sandbox Code Playgroud)

performance sql-server subquery sql-server-2012 query-performance

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

查找 ID 相同但日期不同的行

考虑下表tbl:

id    date
1     2016
1     2017
2     2017
2     2017
3     2016
3     2017
4     2018
5     2018
Run Code Online (Sandbox Code Playgroud)

如何仅获取具有相同 ID 但不同日期的行。

现在我只能获得超过 1 个计数的 id,如下所示:

select id, date
from tbl
group by id
having count(id)>1
Run Code Online (Sandbox Code Playgroud)

我怎样才能只获得 id 1 和 3 以及日期?

sql-server sql-server-2012

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

在sql日志中设置默认空间可用

我们有一个数据库需要 40% 的日志文件随时可用,否则我们会收到警报。当达到限制时,我找不到设置增长的方法。

当然,我们可以将自动增长设置为某个限制,但随后我们必须每周进行一次以根据上次增长增加 40%。

有任何想法吗?SQL 2012

sql-server-2012 transaction-log auto-growth

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

频繁查询表或单独表中的LOB

我在 Microsoft SQL Server 2012 服务器中有一个名为 FinTrans 的表,在任何给定时间都有大约 10K-30K 条记录,每天插入和删除大约 2K 条记录。

该表有 3nvarchar(max)列,用于保存事务的可能错误消息(3 种不同类型的消息,因此是单独的列)。每当列出表的内容时,nvarchar(max)也会读取这些列。列是nvarchar(max)因为它们的内容可能会超过 4K,但是机会很小(也许每周有一个记录)。

在这种情况下,最好将此列存储在与 FinTrans 表具有 1:1 关系的单独表中,还是我应该将列留在原处?

sql-server sql-server-2012 blob relations

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

对使用连接或子查询 SQL 感到困惑?

表格1

Id Name  DemoID
1  a      33
2  b      44
3  c      33
4  d      33
5  e      44
Run Code Online (Sandbox Code Playgroud)

表2

Id DemoID IsTrue
11  33     1  
12  44     1
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用以下 2 个使用连接和使用子查询的查询来找到表 2 中存在哪个 DemoID,但是对于更多的记录,哪个更准确/更相关?

使用加入 -

SELECT Table1.Id FROM Table1  Table1 join Table2 Table2 on Table1.DemoID  = Table2.DemoID 
WHERE Table2.IsTrue = 1
Run Code Online (Sandbox Code Playgroud)

使用子查询 -

SELECT Table1.Id  FROM Table1  Table1
WHERE Table1.DemoID  in (select Table2.DemoID from Table2 Table2)
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

在 WHERE 子句中更改运算符时,简单的递归 CTE 会爆炸

正如标题所述,我有一个递归 CTE,当我更改 WHERE 子句中的运算符时,即使只有两行数据,它也会爆炸。

CREATE TABLE #Recursion
(Parent varchar(10), Child varchar(10), TopDate datetime)


INSERT INTO #Recursion (Parent, Child, TopDate)
VALUES
('00003137', '00003137', '2018-08-31'),
('04536347', '00003137', '2017-02-28'),
('05458040', '05458040', '9999-12-31'),
('00269705',' 05458040',' 9999-12-31')

;WITH 
Parent AS
  ( SELECT parent
     , child
     , 1 as sort
     , TopDate
 FROM #Recursion 
WHERE parent = child
 UNION ALL
   SELECT s.parent
        , d.child
        , d.sort + 1
        , s.TopDate
 FROM Parent as d
 JOIN #Recursion s
   ON s.child= d.parent
WHERE s.TopDate < d.TopDate
)

  SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2012

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

为什么 sqlexpress 在 .\sqlexpress 上运行而 mssqlserver 在 .\ 上运行

我有两台电脑。

一台机器运行sqlexpress,实例名为SQLEXPRESS

另一台机器运行 mssqlserver,实例是 MSSQLSERVER。

为什么 sqlexpress 在 .\sqlexpress 上运行而 mssqlserver 只在 .\ 上运行?

sql-server sql-server-2012

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

将 SQL Server 结果转换为 PowerShell 可以访问和使用的文本文件

下面的查询用于创建一个带有服务器名称列表的文本文件。

我遇到的问题是文本文件的创建就像

Server, Server, Server etc.
Run Code Online (Sandbox Code Playgroud)

但我需要它如下

Server
Server
Server
Run Code Online (Sandbox Code Playgroud)

查询:

BEGIN
    CREATE TABLE [TempPSWmiObjectQuery]
                (QueryText nvarchar(max))
END

INSERT INTO [TempPSWmiObjectQuery]

SELECT STUFF((SELECT char(13)+char(10), 
             SUBSTRING(ServerName, 1, 
             CASE WHEN CHARINDEX(',', ServerName) > 0 
                  THEN CHARINDEX(',', ServerName)-1
                  ELSE LEN(ServerName)
             END)
FROM MasterList
FOR XML PATH('')), 1, 1, '')

EXEC sp_configure 'xp_cmdshell', 1;  
RECONFIGURE

EXEC xp_cmdshell 'bcp SQLEnv.dbo.TempPSWmiObjectQuery out "\\ServerName\Data\temp\testlist.txt" -c -T -S "ServerName\Instance"'

EXEC sp_configure 'xp_cmdshell', 0;  
RECONFIGURE

DROP TABLE TempPSWmiObjectQuery
Run Code Online (Sandbox Code Playgroud)

PowerShell 脚本:

        $StagingServer = "ServerName\InstanceName"
        $StagingServerDatabase = "SQLEnv" 

    foreach($line in 
    [System.IO.File]::ReadLines("\\ServerName\Data\temp\testlist.txt")) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server powershell sql-server-2008-r2 sql-server-2012

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

目标/总内存高于 max_server_memory

max_server_memory在我们的生产 SQL Server 上将设置配置为 141 GB,目标/总服务器内存为 144 GB。

我认为max_server_memory代表我愿意让 SQL Server 引擎使用多少内存,如果是这样,为什么它使用更多?

运行 SQL Server 2012 SP3,安装了 160 GB 内存的物理机,机器上没有运行其他实例,但我们也在运行集成服务。

我们有 75 个用户数据库,总大小为 928 GB。我不确定是否正在使用列存储,或者我如何检查它。这是一个供应商应用程序。

现在目标内存 = 144,384,008,总计 = 144,378,261。

该实例自美国东部时间昨晚 2019-05-01 22:20:21.097 以来一直在运行。我们有一些基础设施维护需要停止实例。但是,我注意到很长一段时间以来,总/目标始终为 144,而最大值始终设置为 141。周一至周五主要工作时间的 PLE 平均约为 0.5 到 1 小时,有时会跳至 2 小时.

sql-server memory configuration sql-server-2012

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