Questions tagged «sql-server»

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

2
SQL Server相当于Oracle USING INDEX子句
在Oracle中是否有与USING INDEX子句等效的SQL Server 2008?专门针对构造: CREATE TABLE c(c1 INT, c2 INT); CREATE INDEX ci ON c (c1, c2); ALTER TABLE c ADD CONSTRAINT cpk PRIMARY KEY (c1) USING INDEX ci; 在有关唯一索引的Sql Server 文档中,它指出了(强调): 唯一索引通过以下方式实现: 主键或唯一约束 创建PRIMARY KEY约束时,如果表上的聚簇索引尚不存在并且未指定唯一的非聚簇索引,则会在一个或多个列上自动创建一个唯一的聚簇索引。主键列不能使用NULL值。 这似乎暗示着有一种方法可以指定应将哪个索引用于主键。

2
如何解决SSIS Excel Connection Manager错误0xC0209303?
我创建了一个SSIS包,该包将excel文件导入到SQL Server表中。 当我在计算机上本地运行SSIS程序包时,它运行没有问题,但是当我在将要安排该程序包的服务器上运行它时,出现以下错误(从文本文件中,我输出错误到使用SSIS日志记录)。 经过研究,我能找到的唯一建议是将Run64BitRuntime属性设置为false,我确实做到了,但还是没有运气。我怀疑这是导致我的错误的原因,因为该错误未指定任何有关64位的内容(就像我发现的文章一样)。 我还认为服务器可能没有适当的Excel驱动程序,但我也不认为是这种情况,因为通常错误消息会说明未注册驱动程序。 我目前没有访问服务器的远程权限。我只能将程序包上传到文件夹,然后由应用程序运行,因此我只能看到的错误消息是我创建的文本错误日志中的内容。 错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“ Envision”的AcquireConnection方法调用失败,错误代码为0xC0209303。在此之前可能会发布错误消息,并提供有关AcquireConnection方法调用失败原因的更多信息。 “ Envision”是我的excel连接管理器的名称。 我使用表达式填充Excel文件路径和连接字符串。 连接字符串表达式如下所示: “” Provider = Microsoft.ACE.OLEDB.12.0; Data Source =“ + @ [User :: SourceFilePath] +”;扩展属性= \“ EXCEL 12.0 XML; HDR = YES \”;“ SSIS Pacakge由Windows用户名/帐户执行。我认为这可能是一个Web服务帐户。(BDS_sprtIIS) 关于如何解决仅在我的本地计算机上有效但不能在将软件包部署到的实际服务器上工作的软件包问题,是否有人有任何解决方案或建议? 我在另一个论坛上找到了以下答案,这可能是引起我问题的原因吗?他们基本上是说Excel连接管理器由于某种原因试图访问用户的temp文件夹,如果它无权访问该文件夹,则它将失败: https://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/da77919c-0161-4eb5-bf89-7107d839435a/the-acquireconnection-method-call-to-the-connection-manager-excel-connection-经理失败?论坛= sqlintegrationservices 我也注意到Microsoft.JET.OLEDB.4.0驱动程序将尝试读取已登录用户的配置文件下的temp目录。 。 ...我们使用较低级别的域帐户运行SQL代理,并使用代理帐户运行SSIS包。您是正确的,因为Procmon也为我确认了这一点。我将代理帐户权限授予了配置文件的临时目录(C:\ Documents and Settings \ SQLAgentDomainAccount \ Local Settings …

2
列存储索引中的标识列
我有一个非常大的表IMO(约1.37亿行),其中包含很多重复数据,很多NULL列等等。 我正在考虑使用带有a的表进行探索,COLUMNSTORE INDEX并且IDENTITY在原始表中有一列,这是我唯一的一列,其中每一行都是唯一的。 我应该保留还是不包括此列?我已经读到您想将表的所有行都包含到中,COLUMNSTORE INDEX但是我也读到最好的候选者是具有很多非唯一行的列。 这只是一个不好的候选人COLUMNSTORE INDEX吗? 我正在使用SQL Server 2012,因此它是非群集的列存储。我只是在探索可能更好的方法来存储这些数据。更新是不存在的,尽管新行将通过ELT流程定期添加,所以我假设在那里会做一些工作。一些人挖掘这些数据并生成大量报告,进行大量行扫描,有时使服务器爬网,这迫使我们每天将副本卸载到辅助服务器。

1
递归SQL查询性能问题
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 这是我第六次尝试问这个问题,也是最短的一个。先前的所有尝试都是通过类似于博客文章的方式而不是问题本身来实现的,但是我向您保证,我的问题是真实的,只是它涉及一个大主题,而没有所有这些细节,该问题将包含在其中。不清楚我的问题是什么。所以这里... 抽象 我有一个数据库,它允许以某种幻想的方式存储数据,并提供了业务流程所需的一些非标准功能。功能如下: 通过仅插入方法实现的非破坏性和非阻塞性更新/删除,允许数据恢复和自动记录(每个更改都与进行更改的用户相关) 多版本数据(同一数据可能有多个版本) 数据库级权限 最终与ACID规范和交易安全的创建/更新/删除保持一致 可以将当前数据视图快退或快进到任何时间点。 我可能还没有提到其他功能。 数据库结构 所有用户数据Items均以JSON编码字符串(ntext)的形式存储在表中。所有数据库操作都通过两个存储过程GetLatest和进行InsertSnashot,它们允许对数据进行操作,类似于GIT操作源文件的方式。 结果数据在前端被链接(JOINed)成完全链接的图,因此在大多数情况下不需要进行数据库查询。 也可以将数据存储在常规SQL列中,而不是以Json编码形式存储它们。但是,这增加了总体复杂性。 读取数据 GetLatest结果以说明形式提供数据,请考虑下图进行说明: 该图显示了对单个记录所做的更改的演变。图表上的箭头显示了进行编辑所基于的版本(假设用户正在脱机更新某些数据,与在线用户进行的更新并行,这种情况会引入冲突,基本上是两种数据版本而不是一个)。 因此,GetLatest在以下输入时间跨度内调用将产生以下记录版本: GetLatest 0, 15 => 1 <= The data is created upon it's first occurance GetLatest 0, 25 => 2 <= Inserting another version on top of first …

1
将存储过程结果关联到SSIS变量
我试图将存储过程中的值放入SSIS变量中,然后进行测试以查看如果我添加了一个表达式,两个SSIS任务是否可以工作。因此,例如,我尝试使用此存储过程: 也许我什至在设置SSIS变量属性时都完全错了,因为我也不知道我是否对存储的proc值导入SSIS变量的方法是否正确。如果您还需要其他任何屏幕截图,请告诉我。 这是任务示例: 这是优先约束编辑器的屏幕截图: 这是第一个任务的属性: 我希望它根据这种情况前进(或失败)。但是,当我对其进行测试时,该过程无论从第一个任务流向第二个任务,仅向我显示第一个任务的“ 100%完成”,而与它是否检查此表达式是否正确无关。我该怎么办?出了什么问题?我在SSIS中确实有一个名为“ orderCount”的变量,用于从存储的proc中获取值。

1
查询DMV sys.dm_os_performance_counters时返回零行
我有一个用户SQL Server 2014 Standard Edition (RTM)具有SYSADMIN与服务器视图状态权限的角色,但是当我执行DMV sys.dm_os_performance_counters返回没有记录。 知道权限有什么问题吗? @@ Version的输出: Microsoft SQL Server 2014-12.0.2000.8(X64)2014年2月20日20:04:26版权所有(c)Windows NT 6.3上的Microsoft Corporation标准版(64位)(内部版本9600 :)(管理程序)

2
NoSQL:什么是非结构化数据?
目前,我们基于mssql服务器的解决方案正在资源边缘运行。 现在,关于下一步解决负载的问题,我们有许多传统的选择: 购买更快的CPU和IO 拆分一些客户以分离服务器 将数据库移到群集 就许可和硬件或时间而言,所有这些都是昂贵的。因此,我想通过将整个系统移至nosql引擎cassandra承诺的可伸缩解决方案中来添加另一种选择。 但是,我不确定noSQL数据库也没有使用过SQL数据库,因此我需要了解“非结构化”数据的结构。 在我们的应用程序中,我们基本上将用户以各种方式输入的数据存储为“键值”列表。有一个父表,它包含head元素(如Order),还有一个子表,其键值对包括该订单的内容(如Order_Lines)。 在业务方面,Order和OrderLines是一个单位。但是由于RDBMS,它们存储在表中,并且必须一直连接。 在操作过程中,有时我们选择只加载顶部,但是在大多数情况下,我们加载头行+一些KVP以显示一些有用的信息。 例如,在概述列表中,我们在每行的列中显示头标识符+一些值。 更新:我们存储任何形式的表格。因此,基本上我们存储“文档”。但是,我们必须按任何值,排序等来准备和搜索这些形式。数据访问控制在数据库上增加了另一层兼容性。 您可能会猜到,某些KVP的数量和可用性因对象而异。没有有效的可能性为每种对象创建单个表,因为我们必须为不同的数据组合创建数千个表。 这种“字典”之类的数据集会更好地存储在noSQL数据库中吗?并从中获得性能收益吗?卡桑德拉会将这些head + KVP建模为一个数据集吗?看看cassandra网页和一些教程,我的印象是,在数据组织方面,我们的RDBMS和cassandra之间并没有太大的区别-如果您要选择5个KVP,我们将拥有大量的连接为每一行的列表。 欢迎启蒙,也可以使用指向这些问题的论文的指针。

1
在扩展事件会话上无法观看实时数据
我在PC上运行SQL Server 2014 Developer Edition。我正在尝试在system_health会话中查看数据。在SSMS中,我已连接到数据库,扩展了服务器/管理/扩展事件/会话。我看到AlwaysON_health(已停止)和system_health(正在运行)。 右键单击system_health会话时,出现以下错误: 使用提供的参数初始化存储失败。(Microsoft.SqlServer.XEventStorage)找不到名为“ system_health”的扩展事件会话。确保会话存在并已启动。(Microsoft SQL Server,错误:25728) 我展开system_health并看到目标package0.event_file和package0.ring_buffer。如果我右键单击任一目标并选择“查看目标数据”,则会收到此错误: 使用提供的参数初始化存储失败。(Microsoft.SqlServer.XEventStorage)无法查看功能'fn_MSXe_read_event_stream',因为该功能不存在或您没有权限。(Microsoft SQL Server,错误:15151) 该功能确实存在。我可以运行它: select * from fn_MSXe_read_event_stream('system_health', 0); 当我这样做时,会出现以下错误: Msg 25728, Level 16, State 10, Line 6 The Extended Events session named "system_health" could not be found. Make sure the session exists and is started. 我知道存在system_health会话。我在会话列表中看到: select * …

3
零或一到零或一
如何以最自然的方式在Sql Server中对零或一到零或一的关系建模? 有一个“危险”表,列出了站点上的危险。有一个“任务”表,用于需要在站点上完成的工作。有些任务是修复危险,没有任务可以应对多种危险。有些危害有修复它们的任务。没有任何危险可以使两个任务相关联。 以下是我能想到的最好的方法: CREATE TABLE [dbo].[Hazard]( [HazardId] [int] IDENTITY(1,1) NOT NULL, [TaskId] [int] NULL, [Details] [varchar](max) NULL, CONSTRAINT [PK_Hazard] PRIMARY KEY CLUSTERED ( [HazardId] ASC )) GO ALTER TABLE [dbo].[Hazard] WITH CHECK ADD CONSTRAINT [FK_Hazard_Task] FOREIGN KEY([TaskId]) REFERENCES [dbo].[Task] ([TaskId]) GO CREATE TABLE [dbo].[Task]( [TaskId] [int] IDENTITY(1,1) NOT NULL, …

1
dm_exec_describe_first_result_set_for_object用于多个结果集
是否存在用于返回存储过程中所有结果集的元数据的过程? 类似于sys.dm_exec_describe_first_result_set_for_object,但适用于所有结果集? 最终,我将要发现数据库中每个存储过程中每个结果集的元数据。现在,我将只解决sys.dm_exec_describe_first_result_set_for_object无法描述的结果集。即,第二,第三和第N个结果集。 现在考虑使用SQLCLR来执行此操作: 如何保存具有多个结果集tSQLt 的过程的结果 -SQL Server的数据库单元测试-ResultSetFilter.cs

1
SQL Server配置中的SQL Server服务为空
从Windows 8.1升级到Windows 10时,我注意到SQL Server配置管理器中的SQL Server服务为空。目前,SQL Server仍然可以完美运行。SQL Server 2014安装在本地计算机上。 我已阅读了博客-https: //www.mssqltips.com/sqlservertip/2492/why-is-sql-server-configuration-manager-missing-services/和 http://www.sqlservercentral.com/Forums/Topic1469391- 1292-1.aspx,仍然无法解决该问题。 我备份了数据库,卸载并重新安装了该节点,但该节点仍然为空。我该怎么办? 更新了屏幕截图 SQL Server配置管理器屏幕

2
SQL Server的最大内存包括SSIS?
我在以下服务器上安装了2个sql服务器实例以及SSIS。 请注意,RAM的容量接近384 GB 这是我已应用于两个实例的最大和最小内存设置。我假设两个实例都将使用相同数量的资源,如果确实如此,那么184,320 MB(180 GB)是设置内存的一个很好的起点吗? 我将为SSIS分配多少内存?

1
PK上的压缩与表上的压缩之间有什么区别?
可以在表上设置数据压缩: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED ( SomeId Desc ) ) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE) 可以在主键上定义它: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY …

1
将文件组设置从RESTRICTED_USER更改为MULTI_USER后,为什么我的数据库镜像崩溃了?
我的环境如下: VMWare 5.5充满活力的服务器MS Windows Server 2008R2 Enterprise域和SQL Server 2008 R2 Enterprise。具有光纤通道连接的集中存储。 我的分区中有分区SQL Server DB。我有2个file groups:一个带有实时数据(FG1),第二个带有历史数据(HDG)。 第二个文件组是read-only。每个月我都会在分区中移动-我将新数据(上个月的数据)添加到历史数据中。这个过程是自动的。 我们将数据库移至新服务器。最初,我必须手动执行该过程。在此操作期间,我的镜像发生故障(在操作3之后-参见下面的流程),并出现以下错误: 在主要服务器上: 日志中的行0: Date 15.6.2015 20:54:11 Log SQL Server (Current - 16.6.2015 07:55:00) Source spid84 Message Setting database option MULTI_USER to ON for database MYDB. 日志中的第1行: Date 15.6.2015 20:54:11 Log SQL Server (Current - …

2
SQL Server DB在一夜之间变得无法使用
昨天,我的SQL Server数据库很好。如今,它几乎无法使用-减慢了5到20倍,具体取决于我何时按下它。 在通宵的加载过程中,一些数据已添加到服务器,但没有什么比对数据库有很大影响的卷更是如此。大约50,000条纯文本记录(没有XML或其他轻率的记录)。 该服务器已在今天早晨修补后重新启动。但是,我们所有其他也已打补丁的数据库服务器的行为都不相同。 资源监视器似乎暗示其磁盘IO有故障。即使在数据库中没有实际发生任何事情时,它始终在.mdf文件上以接近100%的容量运行。对Templog.ldf的访问也非常高。 这里没有人是专家DBA(我们都是拥有不同SQL技能的开发人员),我们都对发生的事情感到困惑。我们尝试运行sp_updatestats并将一些大索引移到不同的光盘上,但无济于事。 我认为这一定与补丁有关-似乎太多的巧合。一位同事确信,由于数据负载导致mdf的大小增加到导致执行计划变得效率低下的程度。 到底是什么原因造成的?我们如何找出答案,我们该如何解决? 编辑: 使用sp_WhoIsActive不会显示任何异常。它记录了我自己对sproc的使用以及来自当前正在尝试移动另一个索引的同事的一些命令。那可能现在正在支撑数据库,但是它之前运行得很差。 它是SQL Server 2008 R2的标准版本。SELECT @@VERSION给出: Microsoft SQL Server 2008 R2(SP2)-10.50.4033.0(X64) 2014年7月9日 版权所有(c)Windows NT 6.1(Build 7601:Service Pack 1)上的Microsoft Corporation标准版(64位)(Hypervisor ) 该服务器具有72GB的RAM和三个四核2GHz处理器。 该修补程序仅适用于Windows。除补丁外,没有其他更改。 所选设置: _id name value minimum maximum value_in_use description is_dynamic is_advanced 1540 min memory per query (KB) 1024 512 2147483647 …

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.