Questions tagged «sql-server-2008-r2»

SQL Server 2008 R2(主要版本10.50.xxxx)。请同时用sql-server标记。

1
如何仅使用Xpath从SQL Server中的空XML标记返回null?
我有一个应用程序,可以在XML列中存储有关记录的各种用户定义的数据点。我无法控制如何存储或更新这些内容。 当我查询列时,它可以返回3个值中的1个: 价值 空值 空字符串 $ 64问题我想使用xpath将这些空字符串作为null返回。 我已经找到了很多有关将null作为空字符串返回的答案,但这种方式一无所获。 当有人删除了值时,它们最终以这种方式结束,而不是删除标签,而是将其空白为<value />标签。当从未设置过该值时,将出现空值。他们没有包括xsi:nil。 我已经完成了一个案例声明: select so.SalesOrderId, Case when sopc.value('(Value)[1]','smalldatetime') IS null then Null when sopc.value('(Value)[1]','smalldatetime') ='' then Null Else sopc.value('(Value)[1]','smalldatetime') End as sopc From SalesOrders so Outer apply so.CustomColumns.nodes('/CustomColumnsCollection/CustomColumn[Name="ProjCompleted"]') sopc(sopc) 但这感觉效率低下,并且这不是唯一的专栏,因此使代码更长且更难维护。 编辑以包括样本数据 SalesOrderId CustomColumns SO 1 "<CustomColumnsCollection> <CustomColumn> <Name>ProjCompleted</Name> <DataType>1</DataType> <Value /> </CustomColumn> …

1
重新构建HEAP是否会导致停机?
这是一个令人尴尬的问题,我不敢相信我已经错过这么多年了。 我有一个具有401堆表的供应商第三方数据库。我最近开始使用Brent Ozar的脚本并设置sp_BlitzFirst为每15分钟运行一次以收集等待统计信息等。 它所发现的是,每次运行24小时都在告诉我修复转发记录。可能使某些读者感到震惊的是,我对DMV进行了查询,并获得了一些表,这些表具有超过150,000个转发的记录值。 我知道解决此问题的方法是在表中使用聚集索引,或者作为运行时的临时解决方法ALTER TABLE [tablename] REBUILD。 但是,我无法找到的是这是否使表脱机,以及在运行此命令之前是否应该注意其他问题。 我正在使用2008 R2企业版,并且不知道以这种方式运行它是否可以消除中断的需要? ALTER TABLE [tablename] REBUILD WITH (ONLINE = ON); 有人对这个有经验么?

1
从表返回的重复记录,没有重复项
我有一个存储过程,用于查询繁忙的队列表,该表用于在我们的系统中分配工作。有问题的表在WorkID上具有主键,并且没有重复项。 该查询的简化版本是: INSERT INTO #TempWorkIDs (WorkID) SELECT W.WorkID FROM dbo.WorkTable W WHERE (@bool_param = 0 AND ((W.InProgress = 0 AND ISNULL(W.UserID, -1) != @userid_param AND (@bool_filtered = 0 OR W.TypeID IN (SELECT TypeID FROM #Types AS t))) OR (@bool_param = 1 AND W.InProgress = 1 AND W.UserID != @userid_param) OR …

3
无法插入到新创建的列中
我有一个像这样的简单测试表: CREATE TABLE MyTable (x INT); 在事务中,我尝试添加一列,然后插入到新创建的列中: BEGIN TRANSACTION; PRINT 'Adding column, ''SupplementalDividends'', to MyTable table.'; ALTER TABLE MyTable ADD SupplementalDividends DECIMAL(18,6); PRINT 'Column added successfully....'; PRINT 'Ready to INSERT into MyTable ...'; INSERT INTO MyTable (x, SupplementalDividends) VALUES (1, 3.2); PRINT '**** CHANGES COMPLETE -- COMMITTING.'; COMMIT TRANSACTION; 当我运行上面的代码时,问题是一条错误消息: …

4
是否可以在SSMS中禁用“记住密码”复选框?
有时,我们出于某些测试目的为办公室中的4-5名员工提供了同一台笔记本电脑(因为仅在该笔记本电脑中存在昂贵的许可工具),还要求他们不要单击SSMS中的“ 记住密码”复选框来存储凭据。 但是很少有人无意中单击了该复选框,因此每次我们都需要清除SqlStudio.bin来解决问题。取而代之的是,最好在特定笔记本电脑的SSMS中禁用“ 记住密码”选项。 是否可以在SSMS中禁用“记住密码”复选框? 预期的行为如下:

3
升级到SQL Server 2008 R2涉及的风险
我们有许多SQL Server需要从版本2005升级到2008 R2。微软计划在今年年中之前停止工作,因为微软将停止对此提供的支持。 2005 SQL Server都是SP3和SP4,都在Windows Server 2003上运行(其支持已经终止,但是我们不能再延长一年),但是如果需要,我们可能还会对服务器操作系统进行升级。 这些服务器包括复制(事务),日志传送,报告服务以及运行SSIS包的集成服务器。 我的问题不是在这里,而是想知道在计划升级之前会涉及的风险或可以进行的任何预检查? 另外,就迁移/升级而言,就地升级是否比并行解决方案更好?


2
如何获得像SSMS这样的单个行数?
我有一个客户端c#程序,正在通过执行存储过程ExectueNonQuery,包括PRINT使用InfoMessage事件捕获和错误输出。它工作正常,但我注意到有些奇怪。 当我从SSMS执行存储过程时,它将显示在“消息”选项卡中执行的每个单独的SQL语句的行数(就像它来自InfoMessages)。尽管我的程序确实捕获了所有其他相同的输出,但是我的程序从未看到这些消息。相反,它仅返回ExecuteNonQuery函数结果中受影响的行,该行是所有单个行计数之和(这是无用的)。 例如,此过程: use [tempdb] go SELECT * INTO MyCols FROM sys.columns go CREATE PROC foo As UPDATE MyCols SET name = name + N'' -- SSMS shows (662 row(s) affected) UPDATE MyCols SET name = name + N'' WHERE name like '%x%' -- SSMS shows (59 row(s) affected) PRINT …

6
索引重建时间是否取决于碎片级别?
重建索引所需的时间是否取决于碎片级别? 如果重建相同索引的40%碎片索引需要1分钟,重建80%碎片索引大约需要2分钟吗? 我要求的是执行所需操作所需的RUNTIME(例如,以秒为单位),而不是关于在特定情况下需要执行哪些操作。我知道应该进行索引重组或重建/统计更新时的基本最佳实践。 这个问题不问关于REORG以及REORG和REBUILD之间的区别。 背景:由于设置了不同的索引维护作业(每个晚上,周末工作量较大……),我想知道是否应该对低中级零散的索引更好地执行每日“轻度”离线索引维护作业,以保持关闭时间很小-甚至没有关系,在80%碎片索引上进行重建可能需要与在40%碎片索引上进行相同操作的时间相同。 我遵循了建议,并试图找出自己正在发生的事情。我的实验设置:在没有其他操作且未被任何人或其他任何人使用的测试服务器上,我在uniqueidentifier主键列上创建了带有聚簇索引的表,其中包含一些其他列和不同的数据类型[2数字,9日期时间和2 varchar(1000)]并简单地添加行。对于提出的测试,我增加了约305,000行。 然后,我使用了一条更新命令,并随机更新了对整数值进行过滤的行范围,并使用变化的字符串值更改了VarChar列之一以创建碎片。之后,我检查中的当前avg_fragmentation_in_percent水平sys.dm_db_index_physical_stats。每当为基准创建“新”碎片时,都会将此值(包括该physical_page_count值)添加到下图所组成的录音中。 然后我跑了出来:Alter index ... Rebuild with (online=on); 并CPU time通过STATISTICS TIME ON录音来抓取。 我的期望:我期望至少看到一种线性曲线的指示,该线性曲线显示碎片水平和cpu时间之间的依赖关系。 不是这种情况。我不确定此程序是否真的适合取得良好效果。也许行数/页面数太少? 但是结果表明,我最初的问题的答案肯定是“ 否”。看起来SQL Server重建索引所需的cpu时间既不依赖于碎片级别,也不依赖于基础索引的页数。 第一张图表显示了与先前的碎片级别相比,重建索引所需的cpu时间。如您所见,平均线是相对恒定的,碎片与所需的cpu时间之间根本没有关系。 为了尊重更新后索引页数变化可能会影响重建的时间的影响,我计算了FRAGMENTATION LEVEL * PAGES COUNT并在第二张图表中使用了该值,该图表显示了所需cpu时间的关系以及碎片和页数。 如您所见,即使页面数有所变化,这也并不表示重建所需的时间受碎片影响。 在做出这些陈述之后,我想我的程序一定是错误的,因为重建一个庞大且高度分散的索引所需的cpu时间可能仅受行数的影响-我并不真正相信这一理论。 因此,因为我确实非常想立即发现这一点,所以欢迎任何进一步的评论和建议。

5
使用动态SQL在数据库之间切换
我有一个涉及在多个数据库之间执行各种命令的过程-但是,当我使用动态SQL通过“ use @var”更改数据库时,它实际上并没有更改数据库。 在[test_db]中执行此操作: declare @currentDB varchar(max) declare @sql varchar(max) set @currentDB = DB_NAME() set @sql = 'use [' + @currentDB +']' use master exec(@sql) select DB_NAME() 返回[Master]作为当前数据库名称-如果我将其use [test_db]作为命令而不是动态输入,则它将返回正确的名称。 有没有一种方法可以在数据库之间正确切换?

2
SQL Server 2008:每天重启的序列
我必须添加一个触发器,该触发器应使用以下格式字符串更新列:<current_date>_<per_day_incremental_id>,例如2015-10-01_36。ID必须是递增的,并且允许有空格。 我的方法很幼稚:用当前日期和当前序列值创建一个表,并在其中保留一条记录: create table DailySequence ( date date, sequence int ) insert into DailySequence values (getdate(), 1); CREATE TRIGGER MakeHumanReadableId ON dbo.AuditMeasures FOR INSERT AS DECLARE @ret int; DECLARE @tempDate date; DECLARE @nowDate date; SET @nowDate = getdate(); SELECT @ret = t.sequence, @tempDate = t.date from DailySequence as t; IF …

2
使用数据库跟踪对象的锁定/解锁
我需要跟踪对象的锁定/解锁动作。在对对象(合同,合作伙伴等)执行任何操作之前,将lock发出一个事件。操作完成后,它将发出unlock事件。 我想获取那些已锁定但尚未解锁的对象。目的是使查询快速并避免死锁。 下表是 create table locks ( id int identity, name varchar(255), lock int ) insert into locks values('a', 1) insert into locks values('b', 1) insert into locks values('c', 1) insert into locks values('d', 1) insert into locks values('a', 0) insert into locks values('c', 0) insert into locks values('a', 1) …

4
从链接服务器获取@@ SERVERNAME
这似乎是一个基本问题,但我在那里找不到任何答案-我需要能够从链接服务器获取服务器名称/实例等。我尝试了几件事: select <linked server>.@@SERVERNAME; select <linked server>.SERVERPROPERTY('ServerName'); ...但是没有喜悦。有任何想法吗? 这是SQL 2008 R2&2014(2008R2是链接服务器) 编辑:错误是: 消息102,级别15,状态1,第2行'@@ SERVERNAME'附近的语法不正确。

3
在Windows 10上维护SQL Server 2008 R2
我必须在Windows 10上运行SQL Server 2008 R2,但不支持它,因此没有任何更新。不能安装更高版本的SQL Server。我可以在线找到所有Service Pack和累积更新。 问题: 有没有办法自动获取更新? 如果不是,则必须按顺序安装所有Service Pack,还是只能安装最新的Service Pack。

2
为什么SQL Server Management Studio崩溃?
当我打开SSMS时,收到以下消息: SSMS-SQL Server Management Studio遇到问题,需要关闭。对此造成的不便,我们表示歉意。 我能做什么? 重新启动后问题仍然存在,并且我没有安装任何加载项。 这是在Windows XP上运行的SQL Server 2008 R2 SSMS。 SSMS之前在此计算机上运行没有错误。 不是仅从SQL Server程序包中安装SSMS。建议重新安装软件包吗?或者如何单独安装SSMS? 对于所有用户,都会发生相同的问题。

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.