Questions tagged «sql-server»

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

1
了解MS SQL Server日期类型
考虑以下: declare @dt datetime, @dt2 datetime2, @d date set @dt = '2013-01-01' set @dt2 = '2013-01-01' set @d = '2013-01-01' select convert(varbinary, @dt) as dt, convert(varbinary, @dt2) as dt2, convert(varbinary, @d) as d 输出: dt dt2 d ------------------ -------------------- -------- 0x0000A13900000000 0x07000000000094360B 0x94360B 现在,我已经从理解的文件是datetime有一个较小的范围,并开始从1753年1月1日,而datetime2与date使用0001-01-01作为他们的开始日期。 我不明白不过,是datetime似乎是小端,而datetime2和date是大端。如果是这样,它们怎么能正确分类? 考虑一下我是否想知道一个date类型代表多少整数天。您会认为您可以这样做: declare @d date set …

2
如何减少SQL Server在Windows事件查看器中放置的内容?
作为自动化单元测试的一部分,创建,设置和删除了许多数据库。问题在于,每次发生这种情况时,我们都会在Windows事件查看器中从SQL Server获取一堆记录。这些消息主要是以下内容:“正在启动”,“设置数据库选项”和“已还原索引”。 有什么方法可以修改SQL Server配置,以便它不会将这些琐碎的“信息”级事件记录到事件日志中。他们正在填写日志,因此很难找到有用的信息。

2
使用JOIN有效地更新表
我有一个表,其中包含住户的详细信息,而另一个表中包含与住户相关的所有人员的详细信息。对于家用表,我有一个主键,它使用两列定义[tempId,n]。对于人员表,我有一个使用其3列定义的主键[tempId,n,sporder] 使用由主键上的聚集索引指示的排序,我为每个家庭[HHID]和每个人[PERID]记录生成了唯一的ID (下面的代码段用于生成PERID): ALTER TABLE dbo.persons ADD PERID INT IDENTITY CONSTRAINT [UQ dbo.persons HHID] UNIQUE; 现在,我的下一步是将每个人与相应的家庭相关联,即:将a映射[PERID]到[HHID]。两个表之间的人行横道基于两列[tempId,n]。为此,我有以下内部连接语句。 UPDATE t1 SET t1.HHID = t2.HHID FROM dbo.persons AS t1 INNER JOIN dbo.households AS t2 ON t1.tempId = t2.tempId AND t1.n = t2.n; 我总共有1928783户家庭记录和5239842人记录。当前执行时间非常长。 现在,我的问题是: 是否可以进一步优化此查询?更一般而言,优化联接查询的经验法则是什么? 是否有另一个查询构造可以在更短的执行时间内达到我想要的结果? 我已将SQL Server 2008生成的针对整个脚本的执行计划上载到 SQLPerformance.com

1
XML列的IN和NOT IN
我有一个带有xml列的表。Xml类似于 <Root> <Row> <user>abc</user> <Rowid>1</Rowid> </Row> <Row> <user>vf</user> <Rowid>2</Rowid> </Row> <Row> <user>ert</user> <Rowid>3</Rowid> </Row> <Maxrowid>3</Maxrowid> </Root> 现在下面的查询返回sl_no列和myxmlcolumn行包含节点``user''()中具有值``abc''或``xyz''的xml列。查询以下我正在使用类似于sql的IN选项。 SELECT [mytable].[Sl_no], [mytable].[myxmlcolumn] FROM [mydb].dbo.[mytable] WHERE [myxmlcolumn].exist('for $x in /Root/Row where (($x/user[fn:upper-case(.)=(''ABC'',''XYZ'')])) return $x') > 0 我想要类似的查询,其功能与sql'NOT IN'相同。在我的情况下,我希望在xml列的节点“ user”()中不具有值“ abc”或“ xyz”的行。所以请帮我。

1
SQL和树中的链接列表
尽管SQL与表之类的操作更相关,而与递归无关,但说我们想实现链接(或双链接)列表概念(例如我们在C语言中)。 考虑到我们可以使项目从链接列表中的任何位置移动到任何位置,有什么方法可以有效地做到这一点? 一些使用CLR的解决方案? 还是它真的不应该带到SQL Server? 请注意,这个问题也演变成VS链表的讨论 尽管我固定了SQL Server,但这是一个类似学术的问题,因此,即使我们仅得出结论,那就是永远不要将其带入数据库,也可以采用其他解决方案。

1
SQL Server不使用可用内存
Windows 2008R2 Enterprise上的SQL Server 2008 R2标准版(64位) 服务器具有超过300 GB的内存,但控制面板中的总内存使用量永远不会超过86 GB 将SQL配置为使用最大内存量 即使在大量使用的情况下-超过80%的CPU持续数分钟 专用SQL Server 几个大型数据库 一个频繁使用的表的索引大小仅超过10 GB 设置服务帐户以保留内存中的锁 那正常吗? 我可以测试什么? 我可以让SQL Server使用更多的内存吗?

1
应在哪台计算机上禁用TCP Chimney Offload?
我建议某人有关如何禁用Windows Server 2003 SP2默认启用的TCP Chimney Offload。我们正在具有多个服务器机器的环境中工作,即与数据库服务器机器进行通信的应用程序服务器机器。 这可能导致应用程序和数据库之间的通信问题。请参阅KB942861和Windows可伸缩网络包-对SQL Server工作负载的可能的性能和并发影响。 应在哪台计算机上禁用TCP Chimney Offload?应用程序,数据库还是两者?

1
SSIS组织
我对SSMS很熟悉,但是我从未使用过.net,c#或visual studio(曾经做过其他事情:汇编程序,c,unix,vi,oracle等)。 我试图找出基本的2012 SSIS ETL(没有BI或数据仓库),却找不到任何能解释所有这些如何组合的东西: 目录 解决方案 项目 包还有其他吗? 说我只想使用SSIS建立一个简单的测试,将一个文件导入到一个表中,以上哪个是必需的,我按什么顺序创建它们? 另外,您是否具有指向SSIS 2012 ETL基本概述和/或如何撰写文章的良好链接。

1
估计行与实际行之间的差异(实际比估计的要小得多)-排序
我正在运行一个查询,该查询正在处理XML文档中的某些节点。我估计的子树成本为数百万美元,这似乎全部来自sql服务器对我通过XPath从xml列提取的某些数据执行的排序操作。排序操作估计的行数约为1900万,而实际的行数约为800。查询本身运行得很好(1-2秒),但是差异让我想知道查询性能以及为什么这样做相差这么大?

2
寻求谓词不使用所有可用列
我有一个奇怪的查询编译问题,很难重现。它仅在高负载下发生,不能轻易重复。 有一个带有列A,B,C,D的表T。 T(A,B,C,D)上存在一个非唯一的聚集索引。 有一个查询SELECT * FROM T WHERE A = @ P1 AND B = @ P2 AND(C = @ P3或C = @ P4)AND D = @ P5。查找条件位于聚集索引的所有列上,第3列具有OR。 问题在于此查询的查询计划仅在A和B上具有Seek谓词!C和D上的谓词是普通谓词,因此这意味着不使用C和D列上的搜索树。 所有参数的数据类型都与列数据类型匹配。 谁能提供暗示为什么会发生这种情况?SQL版本是2008 R2(SP1)-10.50.2789.0(X64)

2
我可以在服务器中添加什么以使SQL恢复更快?
我有一个2.8TB的SQL数据库(主要是数据文件,一些400GB的日志文件),目前大约需要9个小时才能还原。该数据库用于测试目的,必须在每次运行之间从备份中删除和还原该数据库,以确保我们始终从同一点开始。 我的问题是,该服务器当前具有12个核心和92GB的RAM,以及数据库所在的RAID 5磁盘子系统。哪些区域通常会导致SQL还原过程出现瓶颈?是磁盘,内存还是CPU?


2
SQL Server复制替代软件
我们使用SQL Server复制已有很长时间了,有时会遇到一些问题,有时我们需要重新初始化订阅才能解决某些问题,而其他时候则需要销毁整个复制结构并重新构建它! 我们主要担心的是,一旦遇到复制问题,几乎所有时候,简单的解决方案就是重新初始化复制,这对于我们的业务需求是不可接受的。 现在,我们正在准备发布一个新的大型项目,并且正在尝试寻找进行SQL Server复制的第三方软件。 我们的设置包括分布在分支机构(不同国家/地区)中的服务器+移动客户端(具有本地SQL Server数据库的便携式计算机),我们需要在所有这些服务器之间复制数据,并提供文章过滤功能。 有人可以为我们建议一些替代解决方案吗?


1
分离/附加或脱机/在线是否清除特定数据库的缓冲区高速缓存?
今天,我的一个伙伴告诉我,除了启动SQL Server之外,我还可以简单地分离并重新附加数据库,此操作将从缓存中清除给定数据库的页面和计划。我不同意并在下面提供证据。如果您不同意我的意见或有更好的反驳,则绝对不要提供。 我在此版本的SQL Server上使用AdventureWorks2012: 选择@@ VERSION; Microsoft SQL Server 2012-11.0.2100.60(X64) Windows NT 6.1(内部版本7601:Service Pack 1)上的Developer Edition(64位) 加载数据库后,我运行以下查询: 首先,运行在此处找到的乔纳森·K的AW育肥脚本: AW发胖 --------------------------- -步骤1:Bpool Stuff? --------------------------- USE [AdventureWorks2012]; 走 选择 OBJECT_NAME(p.object_id)AS [ObjectName] ,p.object_id ,p.index_id ,COUNT(*)/ 128 AS [缓冲区大小(MB)] ,COUNT(*)AS [buffer_count] 从 sys.allocation_units AS a 内联接sys.dm_os_buffer_descriptors AS b 开启a.allocation_unit_id = b.allocation_unit_id 内部联接系统分区AS p 开启a.container_id …

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.