Questions tagged «sql-server»

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

4
在SSMS 2012中格式化T-SQL
根据此Microsoft文档: http://msdn.microsoft.com/en-us/library/ms174205.aspx 我应该能够使用ctrl + K,然后再使用ctrl + D在SQL Server Management Studio 2012中格式化我的SQL文档,但是当我使用该组合时,出现错误: 组合键(Ctrl + K,Ctrl + D)绑定到当前不可用的命令(格式化文档)。 我正在尝试对根本没有格式的现有SQL文档进行修改,这使得阅读起来极为困难。有谁知道如何使“格式文档”命令可用,以便我可以用SQL格式化此代码?
39 sql-server  ssms 

1
SELECT INTO表查询的WHERE 1 = 2的意义是什么
如果要从SQL Server中的现有表创建新表,可以执行以下操作 SELECT * into Table2 from Table1 WHERE 1=2 where子句的意义是什么?我尝试了没有where子句的情况,并且运行良好。我在互联网上的许多示例中都看到过where子句,但没有看到为什么需要它的原因。
39 sql-server 

4
在索引中包含列的硬性和快速性规则
是否有任何硬性规定来决定应将哪些列以及应以什么顺序放入非聚集索引中。我只是在阅读这篇文章https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index ,我发现对于以下查询: SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 张贴者建议制作这样的索引: CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) 这是我的问题,为什么我们不能像这样做索引 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, DepartmentID, LastName) 要么 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, LastName) INCLUDE (DepartmentID) 什么原因导致发布者决定保留“姓氏”列。为什么不另列?以及如何决定应以什么顺序将列保留在那里?

4
在专用数据库服务器上,要为操作系统保留多少内存?
假设您有专门用于数据库功能的专用服务器- 您应该为操作系统保留多少内存? 我意识到这可能会有所不同,具体取决于特定的OS,特定的数据库软件等。但是,由于内存对数据库性能非常重要,因此我希望数据库具有最大合理的内存级别,而又不会使主机OS饿死。 所以 首先有什么好的经验法则? 我们应该查看哪些计数器或性能指标来确定我们是否走得太远并且数据库是否因某种原因使主机操作系统处于饥饿状态?

6
如何对服务器上的所有数据库执行SQL
我在单个服务器上针对多个数据库运行一些标准SQL,以帮助我诊断问题: select so.name, so.type, MAX(case when sc.text like '%remote%' then '' ELSE 'N' END) AS Relevant, @@ServerName as Server, DB_Name() as DBName from sysobjects so with (nolock) join syscomments sc with (nolock) on so.id = sc.id where (sc.text like '%emote%') group by so.name, so.type order by so.type, so.name 如何在单个服务器上对所有数据库执行此操作?(除了手动连接到一个并执行)
38 sql-server 

3
在SQL Server中查找新的跟踪标志的方法
那里有很多跟踪标志。有些文档有据可查,有些则没有,而另一些在2016版本中已找到默认行为状态。除了官方支持渠道,Microsoft员工等以外,还有什么方法可以找到新的跟踪标志? 我在这里和这里都阅读了Aaron Bertrand最近的几篇文章,但没有发现有关新的Trace Flags的任何信息。 我将mssqlsystemresource的数据和日志文件复制到一个新位置,并将其像常规数据库一样附加到系统表和视图中,但没有立即发现任何东西。我考虑过列出一个已知的跟踪标志列表,并循环访问该列表中未列出的数字,以查看DBCC TRACEON允许使用哪些标志,但是我想先在这里提出问题。 假设启用它们的DBCC命令必须使用一些资源进行检入以确保跟踪标志有效,那么该跟踪标志可以到达何处?是否存在包含列表的.dll或其他系统文件? 我知道这个问题产生了广泛的影响,但是,这促使人们阅读有关具有特定预期行为的跟踪标志以及2016年的新功能(未达到上述效果)的情况。我最初的想法是,数字可能会以某种方式进行转置,例如7129变成7219。我希望获得一个在7000-7999范围内的有效跟踪标志的列表,以查找排列。将它们作为DBCC TRACEON标志和启动参数进行全部测试,并结合针对功能特性的结果进行测试非常麻烦。

3
什么时候创建统计信息而不是创建索引更好?
我发现了很多有关什么 的信息STATISTICS:如何维护它们,如何从查询或索引手动或自动创建它们,等等。但是,我无法找到有关何时使用的任何指导或“最佳做法”信息创建它们:在什么情况下,手动创建的STATISTICS对象比从Index中受益更多。我已经看到了手动创建的筛选统计信息,可以帮助对分区表进行查询(因为为索引创建的统计信息涵盖整个表,而不是每个分区-太小了!),但是肯定还有其他情况可以从统计对象中受益不需要索引的详细信息,也不需要花费维护索引或增加阻塞/死锁机会的成本。 @JonathanFite在评论中提到索引和统计数据之间的区别: 索引将通过创建与表本身排序不同的查找来帮助SQL更快地找到数据。统计信息可帮助SQL确定满足查询所需的内存/工作量。 那是个很棒的信息,主要是因为它可以帮助我阐明我的问题: 如何知道这(或在任何其他技术信息什么 S和如何 S的相关的行为和性质STATISTICS)帮助确定何时选择CREATE STATISTICS在CREATE INDEX创建索引将创建相关的时候,尤其是STATISTICS对象?仅具有统计信息而不具有索引会更好地服务于哪种情况? 如有可能,提供一个工作场景示例,说明该STATISTICS对象比物体更合适,这对超级骗子很有帮助INDEX。 因为我是一个视觉学习者/思想家,所以我认为并排查看es STATISTICS和INDEXes 之间的差异可能会有所帮助,这是帮助确定何时STATISTICS是更好选择的一种可能方法。 Thingy PROs CONs ------- ---------- ------------------- INDEX * Can help sorts. * Takes up space. * Contains data (can * Needs to be maintained (extra I/O). "cover" a query). * More chances for blocking / dead-locks. …

6
Management Studio System.OutOfMemoryException
我正在使用Microsoft SQL Server 2012,并尝试在Management Studio中对其执行简单查询。我收到以下错误(在SSMS中,在服务器上运行): 执行批处理时发生错误。错误消息是:引发类型'System.OutOfMemoryException'的异常。 系统已安装24GB RAM,但在任务管理器中查找sql​​servr.exe进程仅使用2.9GB。 是否存在某个设置会限制其RAM使用率?

1
数据库的简单或完整恢复模型?
什么时候应该使用完整恢复模型,什么时候应该对数据库使用简单恢复模型? 我一直使用完整恢复模式,因为它是默认模式,但今天我遇到了此错误: SQL Server的Microsoft OLE DB提供程序(0x80040E14)数据库'数据库名称'的事务日志已满。要找出为什么无法重用日志中的空间的原因,请参阅sys.databases中的log_reuse_wait_desc列 特定的数据库实际上是服务器上最小,最不活动的数据库之一,因此我不知道该数据库上的日志如何充满,而不是其他数据库。 为了缩小日志并使数据库可再次访问,我使用以下命令将恢复模型从FULL更改为SIMPLE并缩小了逻辑文件日志 alter database myDbName SET recovery simple go dbcc shrinkfile('LOG FILE LOGICAL NAME', 100) go 它帮助,但现在我需要了解为什么它的帮助下,如何这种情况开始,如何防止这种情况在未来? 编辑: 每天晚上1点,我们都会对服务器上的每个数据库进行脚本化备份。这是由31行脚本完成的,其中最重要的部分是 set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak' set @Description = 'Full backup of database ' + …



4
ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPSHOT
大部分的论坛和榜样的网上总是建议同时拥有ALLOW_SNAPSHOT_ISOLATION并READ_COMMITTED_SNAPSHOT设置为ON,每当别人问快照,行版本或类似的问题。 我猜这两种设置中的SNAPSHOT这个词都会让人有些困惑。我认为,为了使数据库引擎使用行版本控制而不是READ_COMMITTED默认行为的锁定,无论使用什么设置,数据库READ_COMMITTED_SNAPSHOT都设置为ON 。ALLOW_SNAPSHOT_ISOLATION 该ALLOW_SNAPSHOT_ISOLATION设定被设定为ON只允许快照隔离启动事务(例如SET TRANSACTION ISOLATION级快照)时无论的READ_COMMITTED_SNAPSHOT设置。 将这两个设置设置为ON的唯一原因是当它需要具有READ COMMITTED行版本控制和 快照隔离功能时。 我的问题是,我的理解在某种程度上不正确吗?并且这两个设置必须始终一起设置为ON(特别是对于READ COMMITTED行版本控制)?

7
存在(选择1…)vs存在(选择*…)一个或另一个?
每当我需要检查表中是否存在某些行时,我总是总是写如下条件: SELECT a, b, c FROM a_table WHERE EXISTS (SELECT * -- This is what I normally write FROM another_table WHERE another_table.b = a_table.b ) 其他人这样写: SELECT a, b, c FROM a_table WHERE EXISTS (SELECT 1 --- This nice '1' is what I have seen other people use FROM another_table …

8
SQL Server代理作业和可用性组
我正在寻找在SQL Server 2012可用性组中处理计划的SQL Server代理作业的最佳实践。也许我错过了一些东西,但是在当前状态下,我觉得SQL Server Agent并没有真正与这一出色的SQL2012功能集成在一起。 如何使计划的SQL代理作业知道节点切换?例如,我有一个在主节点上运行的作业,该作业每小时加载一次数据。现在,如果主服务器出现故障,我如何激活现在成为主服务器的辅助服务器上的作业? 如果我将作业始终安排在辅助服务器上,则它将失败,因为辅助服务器是只读的。

5
没有子句的大型DELETE FROM <table>的加速方法
使用SQL Server 2005。 我正在执行巨大的DELETE FROM而没有where子句。它基本上等效于TRUNCATE TABLE语句-除了不允许使用TRUNCATE。问题是表很大-一千万行,而且要花一个多小时才能完成。有没有什么办法可以使其更快而没有: 使用截断 禁用或删除索引? t日志已经在单独的磁盘上。 任何建议欢迎!

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.