Questions tagged «sql-server»

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

1
为一个文件夹中的多个.DTSX软件包文件确定PackageFormatVersion
肯尼斯·费舍尔(Kenneth Fisher)发表了一篇博客文章,介绍如何确定我的SSIS包是什么SQL版本?在2015年4月。 它具有一个表,该表将哪个SQL版本映射到PackageFormatVersionXML元数据中找到的哪个SSIS包。在查看1个单个包装时,此功能很有用。 我有一个大约100个SSIS .DTSX软件包的文件夹,我需要知道它们都是哪个SQL版本。 如何批量确定文件夹(文件系统)中PackageFormatVersion多个.DTSX软件包的版本(即SQL版本)? 最终目标是确定要获取并实施以将这些软件包放入其中的正确的TFS版本,因为当前不存在任何源代码控制系统。肯尼斯提出的表格将帮助我回答这个问题,但是首先我需要确认软件包的SQL版本是什么。 假设我没有安装BIDS或SSDT。 假设所需的输出是这样的,其中管道指定一个新列: PackageFilename | PackageFormatVersion -------------------------------------- Package1.dtsx | 3 Package2.dtsx | 4 欢迎使用PowerShell,TSQL,可以抓取目录结构的第三方工具或其他工具。

2
SQL Server 2016 Standard Edition是否支持表分区?
我想将我的SQL Server 2008企业版升级到SQL Server 2016标准版; 但是,一个数据库利用多个文件组上的表分区(用于大型日志表,每天都是一个分区) 我在SQL Server 2016的版本和受支持的功能的“ RDBMS可伸缩性和性能”部分下看到,它说标准版支持表和索引分区,但是不支持分区表并行。 我不确定我是否完全理解这一后果。 在我看来,这到底是什么意思,它将如何影响数据库的性能?

1
自动更新统计信息不更新统计信息
我用SQL SERVER 2012我有我Auto Update Stats 对我的数据库。 从下面的链接中,我了解到,对于SQRT(1000 * Table rows)表行中的每个更改,自动更新统计信息都会触发。 https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/ 我创建了一个包含1000条记录的表 SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn, name INTO stst FROM sys.objects 建立统计资料 CREATE STATISTICS rn ON stst (rn) CREATE STATISTICS name ON stst (name) 检查创建的统计信息 DBCC show_statistics('stst', rn) -- Rows 500 DBCC show_statistics('stst', name) -- …

2
选择从指定值开始直到另一个指定值的行
我有一个包含几个列的表,想要检查一个列值,选择该列值之后的行,直到显示一个单独的列值。我尝试使用BETWEEN,但是如果列值是整数,则仅查找整数之间的数字。 例如,如果我有一个这样的表: id时间值 t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t5 12:10 PM 250 t5 12:15 PM 15 t8 11:00 AM 15 t8 3:00 PM 2 t8 3:05 PM 100 t2 7:00 PM 15 t2 7:01 PM 16 t15 5:00 AM …

1
在SQL Server中是否已记录$ IDENTITY并且可靠?
我了解到SQL Server可以使用伪列返回表的(单个)标识列的值$IDENTITY: SELECT $IDENTITY FROM Table 此功能是否已记录且可靠?唯一官方提及的内容是在IDENTITY页面上,但它已包含在代码示例中。这表明它可能打算不做记录。与此功能相匹配的Google也很少。

1
UPDATE堆表-> RID上的死锁
我正在建立一个测试案例,以证明一定的僵局情况,并且需要对正在发生的事情有一些了解。我有一个堆表,方便地称为HeapTable。该表由2个事务类似地更新。 交易1: BEGIN TRAN UPDATE HeapTable SET FirstName = 'Dylan' WHERE FirstName = 'Ovidiu'; WAITFOR DELAY '00:00:15'; UPDATE HeapTable SET FirstName = 'Bob' WHERE FirstName = 'Thierry'; ROLLBACK TRANSACTION 交易2: BEGIN TRAN UPDATE HeapTable SET FirstName = 'Pierre' WHERE FirstName = 'Michael'; ROLLBACK TRAN 我先触发事务1,紧接着触发事务2。正如预期的那样,事务1将要求一些互斥锁以及一些意图互斥锁。事务2将进入并请求在同一RID上进行更新锁定: spid dbid ObjId IndId Type …

1
为什么EXEC语句的query_hash为零?
我正在使用扩展事件为SQL Server设置监视系统,以查找繁重的查询作为开发人员的“生产反馈”。我正在使用event sp_statement_completed和sql_statement_completed,并在cpu_time,逻辑读取等上使用谓词过滤器。我希望将结果聚合在一起,database_name并query_hash像在Internet上的众多示例中所展示的那样,但是在结果中,我看到query_hash所有语句的结果均为0使用EXEC,如下表所示(时间戳和queryhash缩短了可读性)。 name timestamp query_hash plan_handle statement sql_statement_completed 2016...6414 0 050056019600764... exec Shared.dbo.SyncFirm sql_statement_completed 2016...9946 0 06003d00e01e730... exec spSetUserAuth @userid; sql_statement_completed 2016...7184 0 0600e30028c9da0... exec spSetUserAuth @userid; sp_statement_completed 2016...0409 9826...578 0600c00028e6aa0... SELECT obfuscated_columns FROM dbo.SomeTable sp_statement_completed 2016...1448 8660...775 060084006d2d660... INSERT INTO dbo.SomeTable ( obfuscated_columns) EXEC(@sql) sql_statement_completed 2016...7752 0 0600f9006c23f03... …

1
SQL Server数据库“默认”表
当我将新数据库添加到我们的开发服务器(使用SSMS)时,它将自动创建5个表。 这些是另一个数据库中已经存在的应用程序表的副本。 我假设这是SQL Server的一些最新功能,我不知道在哪里可以将表标记为“公共”或类似的标记,因此可以自动将其添加到新数据库中。 但是我怎样才能阻止它的发生呢? 为避免混淆,该数据库未编写脚本,而是直接从SSMS GUI创建的(右键单击“数据库”>“新建数据库”) (从StackOverflow移动)

1
AlwaysON从2014年迁移到2016年
我喜欢2014年的20个Listners,大约有500 DBS, 用最少的时间和精力来迁移这些文件的最佳方法是什么 我的想法是:停止访问备份数据库开始还原数据库运行还原时:在2014上删除AOG在2016上创建AOG完成 这似乎很简单,但是使用TB数据将需要一些时间。 已找到此-> 从2014年升级到2016年的AlwaysOn AG的推荐方法, 但是它确实解释了 希望有人能帮忙

1
什么是SQLServer中的BMK运算符
我试图回答这个问题,说明from子句是可选的..但是我在计划中停留在运算符上。.下面是执行计划的屏幕截图.. 如您所见,查询计划中有BMK运算符,但没有任何指示显示其计算方式。 到目前为止,我已经尝试过的步骤: 我开始使用BMK1000进行搜索,但是它显示了使用同一运算符的一系列问题。最后,我找到了一个线程,其中显示“您要引用的BMK是保留在堆中的存储位置使用非集群索引而不是集群键。”。但是由于我没有任何索引,所以不确定与我的关系如何。 问: 什么是BMK运算符以及如何计算它。任何指针也将有帮助 这是SQLFiddle来再现问题

2
搜索谓词中的标量运算符
在SQL Server 2012中,我使用了实际查询的简化版本。从“容器”表中选择数据时,它在查找谓词中具有标量运算符。 标称运算符在此查找谓词中的用途是什么? CREATE TABLE #EligibleOrders (OrderID INT PRIMARY KEY, StatusCD CHAR(3), CreatedOnDate DATETIME ) --insert logic into #EligibleOrders --Final Query SELECT T2.OrderID ,olic.LineItemID, SUM(c.quantity) AS ShippedQty, COUNT(DISTINCT c.ContainerID) AS ShippedCases FROM #EligibleOrders T2 INNER JOIN dbo.OrderLineItemContainers (NOLOCK) AS olic ON olic.OrderID = T2.OrderID INNER JOIN dbo.Containers (NOLOCK) AS …

1
SQL Server更新了只读文件组上的记录?
我的数据仓库中有一个非常大的数据库,我们在其中实施了分区以管理维护和备份。一定期限的记录最终每月一次迁移到一个只读文件组。 有时,我们的ETL流程会尝试更新已迁移到存档的较旧记录,我们希望这些记录会失败。但是,我至少有两个最近的示例,其中即使测试记录似乎位于测试环境中的只读文件组的分区中(查询sys.partition_functions和sys.partition_range_values),该记录也会被更新。 当尝试更新记录时,生产中的相同记录会导致预期的失败。到目前为止,我们已经两次捕获到该更新,但在生产中失败了,但是在测试中成功了(反之亦然)。 相关环境事实: SQL Server 2012 SP3 CU3(内部版本11.0.6537.0) 测试是开发人员版,生产是企业 可以根据要求提供其他人:现在已严重困扰... 更新2016-08-19 新记录在一夜之间以某种方式更新了。确认它在只读文件组中。发现我可以更新同时插入的记录(即也位于只读文件组的同一分区上)。我在同一分区上确定了一条记录,并且能够多次更新该记录。尝试更新过夜更新的记录会导致预期的失败。 更新2016-08-11 在每晚的测试过程中,只读分区上的更新继续发生。尝试从该过程中更新相同的记录失败。尝试以以前更新记录的用户身份登录时更新相同的记录失败。我也无法通过更新夜间程序尚未触及的类似记录来重复该问题。 更新2016-08-04 今天发现它不限于该单个表,因为我发现了使用相同分区方案在不同表上再次出现相同行为的情况。 更新2016-08-03 运行该脚本这个MSDN脚本证实了我使用肯德拉小的分区助手的意见时得到ph.FilegroupDetail和ph.ObjectDetail从该演示。有问题的记录位于分区2中(有问题的记录的分区列值为2015年3月18日) Filegroup Low Boundary UpperBoundary Archive (RO) NULL 1900-01-01 Archive (RO) 1900-01-01 2015-04-01 ActiveFG (RW) 2015-04-01 2015-07-01 ActiveFG (RW) 2015-07-01 2015-10-01 ActiveFG (RW) 2015-10-01 2015-01-01 ActiveFG (RW) 2016-01-01 2016-04-01 ActiveFG (RW) 2016-04-01 …

1
从2014年升级到2016年的AlwaysOn AG的推荐方法
建议Availability Groups使用一个同步副本从SQL 2014 升级到2016 的建议过程是什么? 我的理解是,in-place升级并不是数据库专业人员真正喜欢的。有没有办法避免in-place升级Availability Groups?是否有可能将2016年服务器加入现有的2014年可用性组并在其中进行故障转移,然后“杀死”其他实例之一并对其进行升级?(例如,通过在同一主机上并排删除/重新安装SQL) 还有其他应考虑的升级方案吗? 理想的解决方案是我们始终有2个online副本,并且不需要进行任何in-place升级。

2
为每个更改的行增加一个计数器
我正在使用没有SEQUENCE功能的SQL Server 2008 Standard 。 外部系统从主数据库的几个专用表中读取数据。外部系统保留数据副本,并定期检查数据更改并刷新其副本。 为了使同步高效,我只想传输自上次同步以来已更新或插入的行。(行永远不会删除)。要知道自上次同步以来已更新或插入了哪些行,每个表中都有一bigint列RowUpdateCounter。 这个想法是,每当插入或更新一行时,其RowUpdateCounter列中的数字就会改变。列中的值RowUpdateCounter应取自不断增加的数字序列。RowUpdateCounter列中的值应唯一,并且表中存储的每个新值都应大于任何先前值。 请查看显示所需行为的脚本。 架构图 CREATE TABLE [dbo].[Test]( [ID] [int] NOT NULL, [Value] [varchar](50) NOT NULL, [RowUpdateCounter] [bigint] NOT NULL, CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [ID] ASC )) GO CREATE UNIQUE NONCLUSTERED INDEX [IX_RowUpdateCounter] ON [dbo].[Test] ( [RowUpdateCounter] ASC ) GO 插入一些行 INSERT INTO …


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.