Questions tagged «sql-server»

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

4
计算总访问量
我正在尝试编写一个查询,其中我必须通过照顾重叠的日子来计算客户的访问次数。假设itemID 2009的开始日期为23日,结束日期为26日,因此项目20010在这几天之间,我们将不将此购买日期添加到我们的总数中。 示例场景: Item ID Start Date End Date Number of days Number of days Candidate for visit count 20009 2015-01-23 2015-01-26 4 4 20010 2015-01-24 2015-01-24 1 0 20011 2015-01-23 2015-01-26 4 0 20012 2015-01-23 2015-01-27 5 1 20013 2015-01-23 2015-01-27 5 0 20014 2015-01-29 2015-01-30 2 2 输出应为7 …

1
如何在UNPIVOT(循环连接)中使用批处理模式?
我有以下形式的查询: SELECT ... FROM ColumnstoreTable cs CROSS APPLY ( SELECT * FROM (VALUES ('A', cs.DataA) , ('B', cs.DataB) , ('C', cs.DataC) ) x(Col0, Col1) ) someValues 这将从Columnstore支持的子查询(ColumnstoreTable)中获取每一行,并将这些行相乘。这本质上是一个UNPIVOT。实际查询大于此。查询的这一部分将用于其他处理。 这里的问题是将其CROSS APPLY实现为循环连接,这是一个合理的选择。不幸的是,循环连接不支持批处理模式。 查询的这一部分对性能非常重要,我怀疑以批处理模式运行它可能对性能非常有益。 如何重写此查询,以便不退出批处理模式? 我确实尝试使用临时表代替VALUES,但这并没有改变没有哈希连接的相等连接条件的事实。

4
还原数据库向导将无法在SSMS 2014中打开
在运行Windows Server 2012 R2的开发机上,我刚刚将SQL Server从2012升级到2014。 使用SQL Server Management Studio 2014时,当我右键单击数据库时Tasks -> Restore -> Database...没有任何反应。还原数据库向导未按预期显示。 事件查看器中没有错误或崩溃。光标甚至都不会变成沙漏。 使用T-SQL还原可以正常工作,如果我返回并使用SSMS 2012,则可以正常工作。关于如何使向导在SSMS 2014中工作的任何想法? 我在两个版本的SSMS中都连接到相同的SQL Server实例,并且尝试以管理员身份运行SSMS。 它是Service Pack 1: Microsoft SQL Server Management Studio 12.0.4100.1 Microsoft Analysis Services Client Tools 12.0.4100.1 Microsoft Data Access Components (MDAC) 6.3.9600.17415 Microsoft MSXML 3.0 5.0 6.0 Microsoft Internet Explorer 9.11.9600.18125 …

4
从哪里开始了解未知数据库
因此,标题进行了总结。 我有一个包含28个表和86个存储过程的SQL Server数据库,必须对其进行反向工程。我很确定,某些表从未使用过,并且并非所有proc也都使用过。 最大的问题是丢失了为此数据库使用的所有Windows服务以及所有软件和数据库文档,并且找不到整个系统的设计人员。 我已经设法创建了一个ER图来帮助我理解这些关系,但是由于我没有数据库管理经验,所以我不知道应该从哪里开始。 同样,如果您不想在这里提出这样的问题,我也感到抱歉。

1
在SSIS包中创建事务时出现问题
我正在处理需要使用事务的程序包,但当前出现以下错误: SSIS package "CATS-Package.dtsx" starting. Information: 0x4004300A at Data Flow Task, SSIS.Pipeline: Validation phase is beginning. Information: 0x4001100A at CATS-Package: Starting distributed transaction for this container. Error: 0xC001401A at CATS-Package: The SSIS Runtime has failed to start the distributed transaction due to error 0x8004D01B "The Transaction Manager is not available.". …

2
从生产中刷新测试数据库中的几个表的最佳方法是什么?
我在SQL Server 2008R2中有一个非常大的生产数据库和一个非常大的测试环境数据库。这两个数据库的表结构相似,但用户/登录/权限/角色不同。 我只需要每月从生产中定期刷新测试数据库中的几个表即可。 我正在计划执行此操作的当前方法是 使用BCP实用程序从生产中导出我需要的表。 将bcp导出文件复制到测试服务器上 在测试中刷新的所有表上禁用索引和约束 截断测试数据库表 使用BCP将数据加载回Test数据库表中。 在测试中重建索引并重新启用约束 对于这么小的任务,这一切似乎都太复杂了。似乎还会产生很多重做(在t-log中),是否有更好的方法呢? 我想到的另一种方法是将生产环境中的备份还原到测试环境中-但是我的问题是完整备份会很大,而且我不需要刷新所有表,只需要刷新几个表即可。 -并且生产数据库中的用户和安全性与测试不同。如果还原整个数据库,那么生产数据库中的安全设置将覆盖该设置。

3
了解关闭“验证备份完整性”对SQL备份的影响/风险
当前,我们在环境中的SQL Server 2005/2008 / 2008R2 / 2012服务器上使用标准维护计划进行备份,并且始终选中“验证备份完整性”框。 一些备份运行时间很长,因此我建议关闭该选项,但是管理层需要我记录此更改的影响和风险。 我了解此选项的用法和历史,对我来说似乎没有必要将备份作业的时间加倍,因为(我认为)可能在备份步骤中而不是在验证过程中发生的任何错误。 我错了吗?如果我要备份到磁盘而不是流式磁带或其他东西,将其关闭的风险很小吗?(如果需要的话,我们会通过网络备份到EMC DD-800备份设备。) 是否有什么正式的MS建议可以安全关闭此功能? 您是否在环境中的每个备份上运行“验证”?你会抽查他们吗? 编辑:为澄清起见,当您在维护计划中选中“验证备份完整性”时,SQL将在每次备份后立即对每个数据库执行完整的RESTORE VERIFYONLY。就像原始备份一样,数据/ IO占用大量资源,并且(基本上)使备份作业的总时间增加了一倍。这是不一样的使备份的“校验”选项(不能在向导中进行,因为据我所知)。


2
为什么我的WHERE子句从“包含”列中受益?
根据此答案,除非在用于限制的列上建立索引,否则查询将不会从索引中受益。 我有这个定义: CREATE TABLE [dbo].[JobItems] ( [ItemId] UNIQUEIDENTIFIER NOT NULL, [ItemState] INT NOT NULL, [ItemPriority] INT NOT NULL, [CreationTime] DATETIME NULL DEFAULT GETUTCDATE(), [LastAccessTime] DATETIME NULL DEFAULT GETUTCDATE(), -- other columns ); CREATE UNIQUE CLUSTERED INDEX [JobItemsIndex] ON [dbo].[JobItems]([ItemId] ASC); GO CREATE INDEX [GetItemToProcessIndex] ON [dbo].[JobItems]([ItemState], [ItemPriority], [CreationTime]) INCLUDE (LastAccessTime); …

4
将来自不同表的数据聚合到一个表中是不明智的做法吗?
背景 我为大量的健康记录数据库写了很多大型报告(写SP,函数,作业等)。原始模式和使用该模式的软件均来自其他供应商,因此我在结构上不能做太多更改。有许多需要跟踪的记录,例如实验室,程序,疫苗等,它们分散在数十张表中,其中许多表肿且索引不正确(我已经能够解决此问题)。 问题 问题是,由于我们对数据库的控制很少,并且可以从任何给定的更新或补丁进行更改,因此使得编写和维护这些报告变得困难而乏味-特别是在存在大量重叠的情况下。它所需要的只是一个补丁,我被困在重写大量报告中的大部分。此外,随着联接,嵌套选择和应用堆积,查询很快变得混乱而缓慢。 我的“解决方案” 我的计划是将所有这些记录写入一个“全部捕获”表,并在原始表上写入触发器以维护该聚合表中的记录。当然,我需要确保触发器在更新后完好无损,但是从可维护性的角度来看,并且仅引用数据,这样做会容易得多。 该表又细又长,仅存储所需的数据,如下所示: CREATE TABLE dbo.HCM_Event_Log ( id INT IDENTITY, type_id INT NULL, orig_id VARCHAR(36) NULL, patient_id UNIQUEIDENTIFIER NOT NULL, visit_id UNIQUEIDENTIFIER NULL, lookup_id VARCHAR(50) NULL, status VARCHAR(15) NULL, ordered_datetime DATETIME NULL, completed_datetime DATETIME NULL, CONSTRAINT PK_HCM_Event_Log PRIMARY KEY CLUSTERED (id) ) 然后,我将使用各种关系表来处理诸如type_id和项目分组之类的事情。 我开始对这个想法进行第二次猜测,因为其中一些表已写入很多,我要编写的SP和报告也将大量引用数据。因此,我担心此表将成为具有这么多I / O的记录锁定和性能噩梦。 …

1
为什么将SQL Server安装到驱动器的根目录是不好的做法
例如,当我将SQL Server安装到驱动器的根目录中D:\时,当我从第三方软件运行数据库部署程序时出现错误。 但是,当我将我的SQL Server实例D:\SQL\移动到(将其移动到驱动器中的文件夹中)时,安装可以完美地进行。 我的问题不是关于数据库部署者的问题,而是更多关于SQL安装到驱动器根目录时会出现问题的原因。这是不好的做法吗?为什么我不应该将SQL Server安装到驱动器的根目录?

2
24/7多用户环境中的SQL Server 2014架构更改
我们安装了SQL Server 2014 Enterprise,以运行应该24/7可用的数据库。我们的数据库足够大(200gb +)。另外,我们有很多服务每分钟都会访问数据库,以读取,更新或插入新数据。我们希望为客户提供“热”重新部署功能,并使我们的每日更新(.net和架构更新)对客户透明。我们已经找到了一种基于群集的解决方案,该群集具有负载平衡器来更新应用程序的二进制文件,但是对于数据库的更新部署过程以及解决此问题的最佳实践还有一些误解。 对于架构更改,请关闭一台服务器,应用架构更改,将其备份,然后将相同的更改应用于第二个实例。可以使用SQL Server工具来完成吗,这是一种通用方法吗?备份服务器后如何同步数据?还是我完全想错了方向,是否有更好的解决方案? 我们常见的架构更改:添加/删除列,添加/删除存储过程

2
将我的数据库项目与Azure服务器进行比较时,SSDT架构比较失败
我有一个建立在我们企业数据库上的SQL数据库项目。使用SSDT的Schema Compare工具,它已在内部和AWS托管的SQL服务器上多次部署。 当我发布到运行SQL Ent 2012 sp2的Azure Hosted Win 2012 Server时出现问题。它返回“比较完成。未检测到差异”。 我知道这是错误的,因为我可以打开企业管理器并将架构与SQL Project进行比较,并发现两者之间存在差异。 我发现了几篇有关2014版如何破坏该工具的文章,但它们之间存在版本差异。 [是的,我做了Google。说明是因为我因忘记这样做而臭名昭著。] https://www.google.com/webhp?ie=utf-8&oe=utf-8#q=ssdt+data+compare+fail+to+detect+difference&start=10 我检查过的其他内容包括确保我的数据库帐户具有无限访问权限。我可以连接管理控制台。我可以连接本地程序。 最后确认存在问题: 我创建了一个SP,该SP的返回值为1。 为了测试,它可能一无所获。 创建SP后,我在所有实例上运行架构比较,除Azure服务器以外的所有实例均显示出差异。 更新资料 我已经证实这是明确地与服务器有关的,因为现在两台不同计算机上的两个不同用户都遇到了相同的确切问题。

1
如何优化查询,使其首先查找一个索引,然后查找另一个索引
我有两组来自卫星数据的地球测量数据,每组都有时间字段(均值朱利安日期为mjd)和地理位置(GeoPoint,空间),并且我正在寻找两组数据之间的重合,以使它们的时间与阈值相匹配。 3小时(或0.125天),且彼此之间的距离不超过200公里。 我已经为表和空间表上的mjd字段都建立了索引。 当我刚刚加入时间限制时,数据库将在8秒内计算100,000个匹配项,并计算该时间内所有100,000个匹配项的距离。查询如下所示: select top 100000 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on h.mjd between m.mjd-.125 and m.mjd+.125 option( table hint ( h, index(ix_MJD) ), table hint( m, index(ix_MJD) ) ) 执行的计划是: 排序后,有9条距离在200公里以下,因此有比赛。问题是,当我添加距离约束并改为运行它时, select top 10 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on …

2
有关PIVOT查询的帮助
我有一个具有以下结构的表: CREATE TABLE [dbo].[AUDIT_SCHEMA_VERSION]( [SCHEMA_VER_MAJOR] [int] NOT NULL, [SCHEMA_VER_MINOR] [int] NOT NULL, [SCHEMA_VER_SUB] [int] NOT NULL, [SCHEMA_VER_DATE] [datetime] NOT NULL, [SCHEMA_VER_REMARK] [varchar](250) NULL ); 一些示例数据(似乎是sqlfiddle的问题。因此,请放置一些示例数据): INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,7,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored …

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.