Questions tagged «sql-server-2008»

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

2
与SQL Server中的派生表相比,使用临时表是否有优势?
我读到派生表比临时表具有更好的性能,但是无论如何,许多SQL Server开发人员都喜欢第二个表。为什么?我必须对大数据(数百万条记录)进行查询,并且我想确保使用的是最佳选择。 CREATE TABLE A( id BIGINT IDENTITY(1,1) NOT NULL, field1 INT NOT NULL, field2 VARCHAR(50) NULL, ); CREATE TABLE B( id INT IDENTITY(1,1) NOT NULL, field1 VARCHAR(10) NULL, field2 INT NULL ); INSERT INTO A (field1,field2) VALUES (1,'a'),(2,'b'),(3,'c'),(2,'d'),(5,'e'), (6,'f'),(7,'g'),(8,'h'),(9,'i'),(2,'j'); INSERT INTO B (field1,field2) VALUES ('a',1),('b',2),('c',3),('d',4),('e',5), ('f',6),('g',7),('h',8),('i',9),('j',2),('k',3); DECLARE @begin INT=0,@end …

3
删除假设指数
过去,我以为我会使用针对集群索引的DROP INDEX语句和针对非集群索引的DROP STATISTICS语句删除假设索引。 我有一个数据库,其中充满了我想清除的DTA残留物;但是,当我尝试删除该对象时,总是收到一条错误消息,告诉我无法删除该对象,因为它不存在或您没有权限。我是服务器上的完整系统管理员,因此希望拥有执行任何操作的权利。 我已经尝试了DROP STATS和DROP INDEX语句,但是都给了我同样的错误。 有人删除过这些吗?我想念一个窍门吗? 附录 翻看一下,我只是注意到,如果我右击该对象,则“ Script As”和“ DELETE”选项均为灰色。

1
如何切碎.docx XML?
我正在尝试将xml(实际上是docx文件)导入到sql server 2008数据库。我几乎是XML编程的新手。我用谷歌搜索了很多,但是几乎所有的示例都带有简单的xml文件。这里的xml文件有点复杂(请参阅下文)。您能否给我一些想法,我应该如何为此XML创建表,以及应该在sql server中运行什么查询。我需要所有标签的值,例如w:p,w:pStyle,w:bookmarkStart,w:t标签等w:rsidP,w:rsidRDefault,w:rsidR <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"> <w:body> <w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0"> <w:pPr><w:pStyle w:val="Heading1"/> </w:pPr><w:bookmarkStart w:id="0" w:name="_Toc212523610"/> <w:r> <w:t>Summary</w:t> </w:r> <w:bookmarkEnd w:id="0"/> </w:p> <w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0"><w:pPr><w:pStyle w:val="mainbodytext"/><w:ind w:right="-694"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>What is the Group Defined Practice for Integrity Management?</w:t></w:r></w:p> <w:p w:rsidR="00EF42E0" …

6
SQL Server处于混乱状态:数据库是否存在?
遇到了一个非常奇怪,令人讨厌的问题。。以某种方式在我们的服务器上运行的SQL Server 2008 R2实例已损坏。 首先,我们注意到昨天创建的数据库丢失了。因此,我们环顾四周,发现它仍然在那里,但是与众不同。因此,我们尝试附加mdf,但收到一条类似于的消息The file is currently in use。 我认为这很奇怪,所以重新启动了SQL Server。同样的事情……好吧,是时候采取严厉措施了……于是,我停止了服务,压缩了mdf,启动了服务,解压缩了它,然后试图恢复它。上面的消息不见了,但是我得到了: 无法附加与现有数据库同名的数据库 哎哟。当然它没有显示在数据库浏览器中,所以不知道发生了什么...不得已: DROP DATABASE [DatabaseName] 当然那没用..这告诉我数据库不存在。因此,我陷入了困境……SQL Server一方面认为数据库确实存在,而另一方面它认为db不存在..显然,它处于混乱状态。 有没有人见过这个?对如何解决有任何想法?

1
SQL Server 2008 R2高缓冲区I / O原因
我正在尝试对我们的文档管理服务器具有的SQL Server的性能进行故障排除,而今天的性能一直处于历史最低水平。 查看我最近设置的管理数据仓库(MDW),我可以看到缓冲区I / O急剧增加。组合的SQL等待时间在1500-2000毫秒的范围内,这比正常时间(大约500毫秒)要高得多。这种增加的很大一部分是缓冲区I / O。 我不是一名DBA,而是出于必要而这样做,我深深地陷入了深度。 有什么办法可以说明为什么缓冲区I / O大大增加了?这是否可能是由于查询提取大量数据或SQL Server内存限制的配置不正确?有什么我应该关注的特定问题(或一般性问题)或可以查询以帮助解决问题的DMV? 该服务器是SQL Server 2008 R2。它是一个运行两个vCPU和8GB RAM的VM,其磁盘托管在SAN的单独阵列上。 上面的图形都是使用SQL Server 管理数据仓库生成的。

1
组织具有大量RAM的SQL Server的策略
现在,我们有一个用于数据库的新服务器,除其他外,我们还有128GB的可用RAM(之前我有16GB)。我知道SQL Server非常擅长管理它的资源,但是我想知道在服务器/数据库设置或处理代码(存储的procs /索引等)中是否应该使用任何特殊设置或策略来确保SS采用可用ram的最大优势。 该数据库约为70GB,它是一个非事务性数据库(它是一个数据仓库)。因此,基本的大写操作然后再进行大量读操作是正常的事情。

1
MSDB中的dbo.DTA_ *表
我在其中一台生产服务器上运行了Brent Ozar的sp_blitz。IT部门将MSDB数据库中的一些表标记为用户创建。它们都遵循dbo.DTA_ *模式。这些表是MSDB附带的,还是由某人/某人添加的?

5
SQL Server 2008和扩展属性
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 在SQL Server中,你们将扩展属性用于什么?一些文章和博客建议将它们用于数据库及其对象的自文档编制,但我看不到它的使用方式是否正确……大多数人是否会忽略这一点?

3
捕获SQL Server CDC中更改的日期时间
因此,我们已经开始探索在我们的一个生产数据库中使用变更数据捕获。我们想知道每次更改的日期时间。通读演练和教程等内容,似乎标准方法是使用LSN与cdc.lsn_time_mapping系统表相关。当谈论一天中成千上万的变化时,这种方法行得通,但不是很简单,也不是很有效。 在测试环境中,我对变更跟踪表进行了以下调整。我发表了一条ALTER TABLE声明,在末尾添加一列,[__ChangeDateTime]并将其设置为默认值GetDate()。该方法似乎有效,更改跟踪仍然正常运行,捕获了日期时间。 但是混用系统表会让我有些紧张。 如果这不是Microsoft从一开始就添加的系统字段,则必须说明其原因。由于他们改而选择了LSN来cdc.lsn_time_mapping方法,我是否通过以这种方式创建自己的hack来解决问题? 更新: 在测试过程中发现,有时GetDate()不够精确,无法满足我们的需求-多个更改同时共享。建议使用sysdatetime()和datetime2将值移至纳秒级。显然只有2008年以上的选项。

2
SQL Server选择计数READ_COMMITTED_SNAPSHOT问题
在特定表上执行select count(*)时,似乎出现了很多死锁。我已经更改了所有必需的参数,并将它们设置为仅行锁定。 我还更改了数据库以使用READ_COMMITTED_SNAPSHOT隔离, 但是,似乎使用select count(*),其中column =?在表上触发死锁或表上的锁。 我是否正确地认为select count(*)应该只访问中间行?但是,似乎不是那样,并且我仍然遇到死锁。正确的索引编制可能会有所帮助, 问题是:即使将read_committed_snapshot设置为on,SQL Server 2008 R2也会在选择count(*)期间在表上放置共享锁吗? 谢谢

2
索引碎片和SSD磁盘
我是性能问题的新手,但我看到一些讨论,即SSD磁盘解决了索引碎片导致的性能问题。有人经历过吗?我正在考虑更改硬件,并且在徘徊是否有帮助

3
确定用户为什么可以删除数据库
我有一个SQL Server用户,可以删除任何数据库。我一直在运行下面的代码,以检查用户在SQL Server中拥有的权限,但无法确定用户如何删除数据库。是否有一个SQL脚本可以帮助我确定该用户如何删除dbs?是否有命令拒绝他们删除任何数据库?(SSMS未将用户显示为dbcreator角色的一部分) select USER_NAME(p.grantee_principal_id) AS principal_name, dp.type_desc AS principal_type_desc, p.class_desc, OBJECT_NAME(p.major_id) AS object_name, p.permission_name, p.state_desc AS permission_state_desc from sys.database_permissions p inner JOIN sys.database_principals dp on p.grantee_principal_id = dp.principal_id order by principal_name 如果有帮助,上面查询的输出将为用户提供以下三个记录 class_desc object_name权限名权限_state_desc OBJECT_OR_COLUMN xp_cmdshell EXECUTE GRANT DATABASE NULL CONNECT GRANT DATABASE NULL CREATE DATABASE GRANT

1
与OUTPUT合并似乎没有做对的事情
我正在向表添加外键,并删除任何违反FK的行,然后将它们复制到ModifiedTable_invalid表中。作为脚本的一部分,我具有以下MERGE命令: MERGE ModifiedTable t1 USING TargetTable tt ON t1.JoinColumn = tt.JoinColumn WHEN MATCHED THEN UPDATE SET t1.FkColumn = tt.FkSource WHEN NOT MATCHED BY SOURCE THEN DELETE OUTPUT DELETED.* INTO ModifiedTable_invalid; 但是,此命令似乎是将ModifiedTable中的每一行插入到ModifiedTable_invalid中,而不仅仅是由MERGE命令删除的行。这是怎么回事,以及如何将其删除的行仅放入ModifiedTable_invalid中?

2
关闭所有SQL Server数据库上的自动收缩。为什么不起作用?
我以为可以使用sp_MSforeachdb解决此问题,但是却收到错误消息。 sp_MSforeachdb ' BEGIN USE [?] DECLARE @dbid INT SET @dbid = DB_ID() IF(@dbid > 4) BEGIN --PRINT ''[?]'' + CONVERT(VARCHAR, @dbid) --ALTER DATABASE [?] SET AUTO_SHRINK OFF END END; ' 如果我在没有注释PRINT行的情况下运行上述查询,则会获得除系统数据库以外的所有数据库的列表。但是,当我取消注释ALTER DATABASE行时,出现以下两个错误消息: 消息5058,级别16,状态2,行9 无法在数据库“ master”中设置选项“ AUTO_SHRINK”。 消息5058,级别16,状态1,行9 无法在数据库“ tempdb”中设置选项“ AUTO_SHRINK”。 这似乎在某种程度上破坏了该操作,因此只有部分数据库被禁用了自动收缩。 知道如何在所有数据库上禁用自动收缩吗?额外的问题:为什么我的方法不起作用?

2
在存储过程中选择权限?
我已授予用户使用动态SQL的存储过程的执行权限。但是当他尝试执行它时,他得到了错误: 对对象“ [表名]”,数据库“ [数据库名]”,模式“ dbo”的SELECT权限被拒绝。 是否需要向用户授予存储过程使用的任何表的权限?这对我来说真的没有任何意义。

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.