Questions tagged «sql-server-2005»

SQL Server 2005(主要版本9.00.xxxx)。还请标记sql-server。

1
计算列中使用的标量函数,更新函数的最干净方法是什么?
我想在我们的数据库中更新一个标量函数。该函数用于键表中的多个计算列,因此如果尝试更新它,则会出现依赖项错误。我可以显式删除列,更新函数并重新添加列,但是,如果没有很多多余的幻想,那将改变列顺序,并可能产生其他意想不到的后果。我想知道是否有一种更清洁的方法?


10
将数据库缩小到其初始大小以下
我有一个SQL Server 2005开发数据库,​​它是实时的30GB副本。我们删除了一些dev中不需要的数据,这使使用的数据文件空间减少到20GB。因此,我们约有33%的未使用。 我需要回收空间,这将允许我们在服务器上拥有第二个开发数据库(基于缩减版本);但是,我无法回收空间,我做了以下工作: 文件的初始大小SMS2_Data为30GB。 DBCC SHRINKFILE (N'SMS2_Data' , 0, TRUNCATEONLY) 其次是 DBCC SHRINKFILE (N'SMS2_Data' , 19500) 不开心 我尝试进行备份,创建一个初始大小较小的新数据库,然后还原,但由于初始大小被覆盖而感到不高兴。也尝试过: ALTER DATABASE SMS2HazSub MODIFY FILE (NAME = 'SMS2_Data', SIZE = 20000) 这是错误的,说: 修改文件失败。指定的大小小于当前大小。 我尝试了20800,然后一直提高到29000(29GB),但仍然不允许我更改它。 完成收缩后,将恢复模式从更改FULL为SIMPLE,然后再次更改。不开心 我认为这与某些TEXT领域有关。我们整个系统中大约有6个。因此,作为测试,我将它们全部删除,然后缩小了文件,但仍然没有变化。 剩下的唯一选择是将数据重新导入到另一个数据库。这是不切实际的,因为必须在实时数据库上进行,因为这样做会带来很大的风险。我们半定期地获取实时数据库的副本并覆盖dev / test。我们有大约500张桌子。我想要一种不会将数据导出到新数据库的风险的方法。 我尝试将数据移动到另一个文件,它复制了除5%之外的所有数据。这就是导致我尝试删除所有文本列的原因。 服务器处于兼容模式90,但为SP2。我现在做了以下3次:重新索引所有表,备份数据库,收缩文件,收缩数据库。仍然没有喜悦。 EXECUTE sp_spaceused 返回: database_name database_size unallocated space SMS2Tests 31453.94 MB …

3
识别哪些值与表格行不匹配
我希望能够轻松地检查表中不存在查询中提供的唯一标识符。 为了更好地解释,这是我现在要执行的操作,以检查表中不存在列表“ 1、2、3、4”的哪些ID: SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4'),假设该表格不包含ID为2的行。 将结果转储到Excel 在原始列表上运行VLOOKUP,以搜索结果列表中的每个列表值。 任何导致的VLOOKUP都#N/A位于表中未出现的值上。 我在想必须有一种更好的方法来做到这一点。理想情况下,我正在寻找类似 要检查的列表->在表上查询以检查->列表中的成员不在表中

1
如果varbinary数据的长度大于2000,则sys.fn_varbintohexstr返回NULL
如果VARBINARY数据长度最大为2000,则sys.fn_varbintohexstr可以正常工作。如果长度大于2000,则sys.fn_varbintohexstr返回NULL。我想念什么? DECLARE @testvarbinary VARBINARY(MAX) SELECT @testvarbinary = 0xFFD8FFE000104A46494600010100000100010000FFDB004300090607080706090807080A0A090B0D160F0D0C0C0D1B14151016201D2222201D1F1F2428342C242631271F1F2D3D2D3135373A3A3A232B3F443F384334393A37FFDB0043010A0A0A0D0C0D1A0F0F1A37251F253737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737FFC0001108007E005C03012200021101031101FFC4001B00000301010101010000000000000000000405060302010007FFC4003A100002010302030407080103050000000001020300041105211231411322516106718191A1B1D11423324252C1E1F03315247243A2D2E2F1FFC4001801000301010000000000000000000000000102030004FFC4001F1100020202020301000000000000000000000102112131034104122251FFDA000C03010002110311003F0096D26DAD2EB4BBBC1646E364000186380727C39FC2A05B218827383E35AC17B728922C7348A24FC60311C5EBACD237918051B9341D195A307C96C64D36D27499EE5FF0777AB31D97D746E97A4A16E39003C232CCC365AABD3AC85C42643C50D9A1FC58EF48454E53E91451B02B2D3ECED8810C4D7328DCB636ACF51BD78BBA63B751FA55B71EEA677921951A2B45FB3DA2F7709F89CF866A7353B66B6004B1852DBAC406E079D4AECA7AD0BEF6E44B8DB881DB0798F6D130D8D9DC420714EAF8DF707E9418B476513721C54C6C1256DE37E3239A9FA1D8D35D681562CBCD1A54FF0019627A6DBE3D54B5A09A26C12411E35FA1C68AD082008F6EF2F41E04797974A5BA9E991CE1C6386451B8E7ED1E345727E81C3B44A6188C926B48D805DCD75240CAC4374D8D0ECC1588C8F7D6AB1927583388851DEF7535D1ED8C8C5C292C7650694440C9270AEFBE6ACF4B8858E9C6E1C0E23B463CFC69E6E9118AB633D3AC3ED320B356C229E295C7C7E9EDA6F74DDB4B1D9DB2948D06000390AE74E84E9FA2F6B201DBCC3888EBBF214D74DB0105AB4B311DAB6ECC7E35CECE840B1DB2C518729961DD894F8D21BBD225BEBB62F9E007BCDD5CFD2AB228CDC66729C2A470C6BE0BFCD3286C91635D86E36DB993D6A6DB2918D91EBE8D3ADAA86C14639DFA5663D1E303A48991C2D8C8E87A57E866D87095C023C3C4560F64ACAF19C77971F434136525049123358B346268D543755C6C1BA8F51FDE95DCDB2B2F0AF351C51127703A827C460FBAAD161CA14FD6A41F261492F20026E3E1C296E21EDC1FEFAEA8883FC3F3DD52139ED00DCECC078D4DC9FE47C83CFC6AFB5CB2E195C22F5181ECC8F854BC964B2396006FCF90ABC1A233BD03E8B6FDADD2AE3CD8F80AB4B5B7FB76A76F6ABFE187BCD8F01CFE9483D1C80C61A4DB8B9EFF0001EFAAFD11560866BACE4B37086F21FD149C92B6371AA563591BB7BD8D3AF1777D7E34F6FA2ED3B2B31B2FE7C780E7F1DA907A384DDEA6D70C3B918E5E7FFC154AF8E29253D7BA0F90E7F1A9B781D2C9922069046ABDDD89F2F01FDF1A38292CB9F1A5F1DC3DAAF69716B2AAB9CF1819029B5ACB14F1C6F1B060C720D4D659D4B11356D872359B3F7D49D803BD17819C30A1E60983D3D7B51780ED500CF188AE4961D5587CA94EA30A8561D158EDE40E7E54E2ECF1C711CE79C648E9E1F3A5D749DBBA2EF97183EBE1A7E8E56B24BEA9171C6CC17246304788FEFC6A52EED1A3B9902120139D9B156F703B4B7CE7018FCC72A437363DBC9C5B02060ED4F1744E684DA70ECEC95B18E3CB7B05502B18748894ECDC238BD6DBFC89A5420FB94893C900A6BA903C10460EEC4B7B3181F0A57B19690EBD17FB8D34CA7F14CE5BD9FD1F1A375BBD92C6D2111A34B2960AA396FD727D64579A7C417B0B755FF181CBCBF9A6325A25DC87B400AA8C2F5A4BAD958C6DE09DB9D6B5A8EE96DD96D431E1EE8E271B8EA718F0F953CB2BB3C28C53B321B0E80EC0E456ADA45A63F0AE7C45613F6513A45100006DF029A4E2F48A45495DBB1D5EDE2A22F06E481B679D25D46FB4F8A45935092490A8FC11F1103D82B4BC950CF0E3903C8D793E97DB44F1A4AE9139058039CEF9FAD2C527B0BBAC1B417F61A8E9F33E9EEA5232090A4F74AF4DFD62BE231340413857CE7CBFA687D1B4DFB0B4D0AE7B29179F0E370303E1F2AD94F02A679E7869A5558219BC89EE515219106E63908DCF81A4174F2097EEC1E1C550DEA94B9BB5D8F112DFBD20C01CCD61582411333478EB9738E9B81464FF0079A84791DD5C03EFFE2B98814310DB90F6EDFCFC2BCE2FF7AF93B81CEB3322A74C7096F2DCB6C48DA8FB07E241BD4E25D715AA42A4E589DBCB63FC53BD31F85064E71492C1D3C237108E1E291B6E805235B888EA0BC6705F2513C05357B81FAB7C50C91DBBB481CA90472CF5A08A340DAB5C5BFDB638EDD959970C573838EB4E218CAC48C84B46C32A7C296358C0854C78CE3761CCFB69ADADC048C28C70A8C628E0D4CE269993209DFA1A5CEE385C83B238F767F9AD354982AB303D29569F722EDAE946E1635EBD467FF5A2B289F2A4A99C5F3715E7AD37F76FF2A9B983472B29C839A757127FBD018EE57F73F5A597E02DC927F300DCBDFF001CD325673CB07CD91328076046287656ED1F6C96C8DBD75B4985556272437BB72298DA409D8971F9188FDEB4B6088B349B9692FE78A418ECC285F31CC9F88AABB1DDCA13B11B5405F3CB6DE91433440FDE479651F98787C2ABF4EBF8EE22574700FCAB4E25B8A411AB5BDD9938ADA72D1E30571B8A1218AE480639FB391464E485F9D39B56ED46 select datalength(@testvarbinary) SELECT sys.fn_varbintohexstr(@testvarbinary)

1
如果NOT NULL,则UPDATE,否则保留字段的值
我认为以某种方式可以使它正常工作,但是由于某些原因,我仍然会出错。 我有以下UPDATE查询: UPDATE DeviceAttribute SET Details = CASE Name WHEN 'Accessories' THEN @Accessories WHEN 'Description' THEN @Description WHEN 'Specification' THEN @Specification ELSE Details END WHERE DeviceID = 10 参数由不同的用户填写。我现在面临的问题是,即使您要更新单个字段,也仍然必须用旧数据填写其他参数。因此,我想设置选项IF @parameter IS NULL然后保留已经存储在数据库中的值。我试图找到一些解决方案,类似以下查询的内容似乎是解决方案,但无法使其正常工作: UPDATE DeviceAttribute SET Details = CASE Name WHEN 'Accessories' IS NOT NULL THEN @Accessories WHEN 'Description' IS NOT …

3
将数据从SQL Server 2005迁移到2016
我是管理SQL Server的新手,但是我对SQL语言和制作SSIS包感到满意。 我想将数据从SQL Server 2005迁移到2016。 我的问题是我是否需要担心系统数据库和其他对象,例如索引,存储过程,视图,安全性和权限。登录,或者我可以只迁移数据。 在这种情况下,建议使用此程序。

3
在某些表上禁用日志记录
我正在使用SQL Server2005。我有两个包含聚合信息的表。信息不断更新,每天生成近5GB的日志数据。(这比整个数据库要大!)我想禁用对这些表的日志记录,因为回滚并不是必须的。但是,我想继续登录数据库中的其他表。 是否可以禁用数据库中某些表的日志记录?如果不是,是否可以将两个表放在相同的架构中,然后禁用该架构的日志记录?将两个表移到一个单独的数据库并在那里禁用日志记录的唯一选择是吗? 更新: 我想我会解释为什么我真的不需要在这些表上记录活动。 这两个表充满了GPS数据,因此它们变得很大。第一个表格是从该字段的六个Android表格中捕获原始位置。每个平板电脑的新数据每5-10秒就会出现一次。然后将该信息汇总为locationA,locationB,travelTime。目标是根据实际驾驶数据最终使所有位置之间的行驶时间最短。该数据仅适用于一个小城市,并且只能精确到小数点后四位,因此是可管理的。但是,随着新的原始数据的到来,需要更新的行进时间变慢,并且需要插入新的行进时间。 原始数据汇总后,将被清除。我们不会退缩到更长的旅行时间,所以这就是为什么在这些表中回滚没有太大关系。

4
我真的需要保留.LDF文件吗?
每个月,我们都会制作生产数据库的月末快照。这些月末快照严格用于报告目的,没有任何插入,更新或删除操作。每个快照都有一个.MDF和.LDF文件。 我想删除.LDF文件并释放服务器上的一些空间。有什么原因需要保留.LDF文件? 澄清: 我们的生产数据库每天晚上都从另一个系统的文件提取中重新创建。我们只报告生产数据库,没有更新。 夜间过程:据 我所知... 每天晚上,数据库表都被截断 。表通过一系列批量插入语句填充。 索引被重建

4
是否有充分的理由将日期和时间保留在单独的列中?
我试图了解我们的软件供应商决定将日期和时间保留在单独的列中。例如,当行被创建或更新时。时间和日期都是DateTime列。我们正在使用SQL Server 2005。 该数据库保存着我们ERP系统的数据,我相信最大的表包含约300万行。大多数表大约在10万至1000万行之间。 我个人默认情况下会为单个时间戳选择一个DateTime。这样可以简化时差计算,并且可以轻松地从时间戳中提取日期和时间部分。它还将消耗更少的空间。 是将日期和时间分开是不好的做法,还是我不理解的设计中有什么很棒的东西?

3
需要帮助解决Sql Server 2005死锁方案
我遇到了一个死锁情况,死锁中唯一的参与者似乎是一个表和一个从该表中删除的存储过程。我根据以下几个死锁时对sql错误日志的分析得出了该结论,并使用下面的MSDN文章作为指导来解密错误日志中的跟踪。 表DEXTable和存储过程ClearDEXTableRows在下面定义。还有另一个存储过程InsertDEXTableRow将行插入DEXTable中,但是基于sql错误日志中的条目,该proc似乎不涉及死锁。 DEXTable具有〜830万行,并且趋于稳定增长。受访者表也很大,并且趋于稳定增长。 可从高流量网站访问该页面,该页面上的页面经常快速连续调用ClearDEXTableRows和InsertDEXTableRow。 在过去的10天里,僵局每天发生0到9次。 我已经为1222启用了SQL跟踪(使用DBCC TRACEON 1222),并且最近才启用了标志1204。在检测和结束死锁上有这些标志的输出的详细说明 我的问题是: 仅此一个存储过程ClearDEXTableRows是造成死锁的原因吗? 如果是这样,谁能提供一个很好的解释,说明如何发生并提出解决方法? 我的怀疑是DELETE语句导致DEXTable PK上的争用,而DEXTable则需要经常重建。 如果不是,我应该启用什么其他跟踪来更深入地了解死锁的原因?(我想在这里学习) -- Table definition CREATE TABLE [dbo].[DEXTable]( [ExportID] [int] NOT NULL, [RespondentID] [int] NOT NULL, [Exported] [datetime] NOT NULL, CONSTRAINT [PK_DEXTable] PRIMARY KEY CLUSTERED ( [ExportID] ASC, [RespondentID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY …

2
如何使用UUID的默认值创建唯一列
我有一个供内部使用的键列,它只是一个递增的整数,但我想有第二个唯一列,它是UUID,但是我不知道如何为默认值调用一个函数(因此,SQL服务器正在创建UUID,而不是Java),是否有任何文档可以为此建议我?

5
查询在SQL 2005与SQL 2008R2上的运行方式不同
在我的办公室,我们有一个非常丑陋的查询,但在生产环境和开发环境(分别为20秒和4秒)中运行得很好。但是,在我们的测试环境中,它需要4个小时以上。SQL2005(+最新补丁程序)正在生产和开发中。SQL2008R2正在测试中。 我看了一下查询计划,它表明SQL2008R2通过表假脱机(惰性假脱机)使用TempDB来存储从链接服务器返回的行。下一步显示嵌套循环(左半连接)占用了查询的96.3%。两家运营商之间的界限为5,398MB! SQL 2005的查询计划不使用tempdb,也不使用左反半联接。 下面是经过清理的代码,执行计划顶部是2005年计划,底部是2008R2。 是什么导致急剧的减速和变化?我期望看到一个不同的执行计划,所以这不会打扰我。查询时间的急剧下降是困扰我的原因。 由于2008R2版本使用的是tempdb,因此我是否必须查看底层硬件,所以我必须查看如何优化其用法? 有没有更好的方法来编写查询? 谢谢您的帮助。 INSERT INTO Table1_GroupLock (iGroupID, dLockedDate) SELECT Table1.iGroupID, GETDATE() FROM Table1 WHERE NOT EXISTS ( SELECT 1 FROM LinkedServer.Database.Table2 Alias2 WHERE ( Alias2.FirstName + Alias2.LastName = dbo.fnRemoveNonLetter(Table1.FullName) AND NOT dbo.fnRemoveNonLetter(Table1.FullName) IS NULL AND NOT Alias2.FirstName IS NULL AND NOT Alias2.LastName IS NULL …

4
TempDB上的DDL争用
我有一个SQL Server 2005 Standard x64,在过去的几个月中,TempDB DDL争用一直遇到问题。服务器将在等待资源2:1:103(等待类型为PAGELATCH_EX)上发生争用。 当服务器处于正常负载时,该问题似乎偶尔发生。我一直在监视“销毁临时表”的速率,在我们在2:1:103遇到PAGELATCH_EX问题时,它的速率可能会跳到5,000+。根据我的阅读,该计数器在大多数情况下应该为0,但在大多数情况下,我们的计数器似乎保持在300-1100之间。仅当系统上用户很少时,计数器才会变为0。 我如何缩小在tempdb上导致DDL争用的原因,而不必在干草堆中寻找针头?

2
在Server Management Studio中显示查询计划
另一个SQL Server问题:自计数器重置以来,我有一个简单的查询,该查询为我提供了最多CPU密集型SQL: select top 10 sum(qs.total_worker_time) as total_cpu_time, sum(qs.execution_count) as total_execution_count, qs.plan_handle, st.text from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.plan_handle) as st group by qs.plan_handle, st.text order by sum(qs.total_worker_time) desc 问题1:究竟是什么plan_handle?它似乎不是计划的哈希,就像在Oracle中一样。我问是因为我希望能够发现陈述计划发生变化的情况。 问题2:一旦有了plan_handle,我会对实际计划感兴趣。因此,例如: select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000) 在query_plan列中,我获得了一个链接,单击该链接可显示XML文档。如果将它保存为磁盘上的what.sqlplan,则可以在Windows中双击它,并在Management Studio中正确显示。肯定有某种方法可以避免此步骤吗? 问题3:有没有办法像过去的SET SHOWPLAN_TEXT一样将XML转换回文本格式?我希望能够以图形方式查看它们,还希望以某种有意义的方式自动对它们进行比较。 谢谢!

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.