Questions tagged «sql-server-2005»

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

4
如何从联接中选择第一行,该联接在主键上返回多个行
这与以下问题有关: 连接多个表导致重复的行 我有两个要加入的表。他们共享密钥。人员表的每个主键只有一个名称,但是电子邮件表的每个personId都有多个电子邮件。我只想显示每人的第一封电子邮件。目前我每人多行,因为他们有多封电子邮件。我正在运行SQL Server 2005。 编辑:这是T-SQL。第一封电子邮件实际上是每人的第一封电子邮件行。 编辑2:我看到的第一封电子邮件将是SQL在查询过程中在连接中显示的第一封电子邮件行。没关系显示哪个电子邮件。只显示不超过一封电子邮件。我希望这一点更加清楚。 Table1: Person Table2: Email Select Person.PersonName, Email.Email From person left join on Person.ID=Email.PersonId;

1
为什么使用CASE,多个COUNT比一个SUM快?
我想知道以下两种方法中哪一种速度更快: 1)三COUNT: SELECT Approved = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Approved'), Valid = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Valid'), Reject = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Reject') 2)SUM与FROM-clause: SELECT Approved = SUM(CASE WHEN Status = 'Approved' THEN 1 ELSE 0 END), …

1
我可以从SSMS查询制表符分隔的文件吗?
是否可以从Sql Server Management Studio查询制表符分隔的文件以查看其数据,而无需将其保存在任何地方? 我知道您可以BULK INSERT使用制表符分隔的文件,例如: BULK INSERT SomeTable FROM 'MyFile.txt' WITH ( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n'); 但是,这需要您事先知道各列并创建一个表来保存数据。 我也知道您可以查询其他一些文件类型,例如CSV或Excel,而无需使用OPENROWSET和Excel驱动程序预先定义列,例如: -- Query CSV SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Text;Database=\\Server\Folder\;HDR=Yes;', 'SELECT * FROM MyFile.csv') -- Query Excel SELECT * FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0;Database=MyFile.xls', 'SELECT * FROM [Sheet1$]') 另外,如果我更改注册表项Format下HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Text从CSVDelimited到TabDelimitedSQL Server上,上面的CSV查询将正确读取制表符分隔的文本文件,但是它将不再读取逗号分隔的文本文件,所以我不认为我想留下那样 …

2
为什么查询在存储过程中比在查询窗口中运行慢?
我有一个复杂的查询,它在查询窗口中运行2秒钟,但作为存储过程大约5分钟。为什么以存储过程的形式运行需要花费更长的时间? 这是我的查询的样子。 它采用一组特定的记录(由@id和标识@createdDate)和特定的时间范围(从开始的1年@startDate),并返回已发送信件的摘要列表以及由于这些信件而产生的估计付款。 CREATE PROCEDURE MyStoredProcedure @id int, @createdDate varchar(20), @startDate varchar(20) AS SET NOCOUNT ON -- Get the number of records * .7 -- Only want to return records containing letters that were sent on 70% or more of the records DECLARE @limit int SET @limit = IsNull((SELECT Count(*) …

4
将多行中的列合并为单行
customer_comments由于数据库设计的缘故,我将某些内容分成了多行,而对于一份报告,我需要将comments每个唯一字段组合id成一行。我以前尝试过使用SELECT子句和COALESCE技巧在此定界列表中进行操作,但是我无法记住它并且一定不能保存它。在这种情况下,我似乎也无法使其工作,只能在单行上工作。 数据如下所示: id row_num customer_code comments ----------------------------------- 1 1 Dilbert Hard 1 2 Dilbert Worker 2 1 Wally Lazy 我的结果需要看起来像这样: id customer_code comments ------------------------------ 1 Dilbert Hard Worker 2 Wally Lazy 因此,每个row_num结果实际上只有一行结果;评论应按的顺序组合row_num。上面的链接SELECT技巧可以使特定查询的所有值作为一行获得,但是我无法弄清楚如何使其作为SELECT将所有这些行吐出来的语句的一部分来工作。 我的查询必须自己遍历整个表并输出这些行。我没有将它们组合成多列,每行一列,因此PIVOT似乎不适用。

6
SQL Server清单
在提出其他问题之后,我想开始考虑我应该在每日/每周/每月的基础上根据警报来考虑什么。我希望能够在问题发生之前就看到问题(这是计划)... 到目前为止,我已经开始收集以下脚本(无顺序): 日常 检查系统正常运行时间(以防万一我需要以DBA身份进行检查) 检查上次备份 检查事务日志备份 检查SQL作业的状态 检查最近24小时(或1140分钟)的平均CPU使用率 每周 检查MSDB备份历史记录 检查以查看最后一次运行CheckDB的时间 检查索引碎片 检查索引状态(读与写等) 检查IO瓶颈 每月一次 检查缺少的索引 检查不再使用的索引 还有其他建议吗?(我是DBA的新手,因此随时欢迎您提供帮助/建议)

3
为什么简单的ALTER TABLE命令在带有全文索引的表上花费这么长时间?
我有一个很大的(约6700万行)名称/值表,该值在DataValue列上具有全文本索引。 如果我尝试运行以下命令: ALTER TABLE VisitorData ADD NumericValue bit DEFAULT 0 NOT NULL; 它运行1小时10分钟,但仍无法在VisitorData包含约6700万行的表上完成。 为什么要花这么长时间而没有完成? 我该怎么办? 以下是有关表格的更多详细信息: CREATE TABLE [dbo].[VisitorData]( [VisitorID] [int] NOT NULL, [DataName] [varchar](80) NOT NULL, [DataValue] [nvarchar](3800) NOT NULL, [EncryptedDataValue] [varbinary](max) NULL, [VisitorDataID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_VisitorData_VisitorDataID] PRIMARY KEY CLUSTERED ( [VisitorDataID] ASC ) WITH (PAD_INDEX …

2
查找哪个会话持有哪个临时表
我们有一个SQL Server 2005数据库,临时数据库已满。通过进入SQL Server Management Studio,我可以看到tempdb中的所有临时表。是否可以判断哪个会话正在保存哪个临时表?理想情况下,该查询将列出每个会话使用的临时表。 谢谢,

5
在SQL Server中,有一种方法可以确定传递给正在执行的存储过程的参数的值
确定执行存储过程的一种方法是使用“动态管理”方法,如下所示: SELECT sqlText.Text, req.* FROM sys.dm_exec_requests req OUTER APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqltext 但是,这仅显示存储过程的create语句的文本。例如: CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id 理想情况下,我想查看正在运行的过程的参数是什么,从而导致该过程对于特定的有问题的参数集运行了这么长时间。 有没有办法做到这一点?(在此问题中, Aaron Bertrand提到了DBCC InputBuffer,但我认为这不适用于此问题。)

1
ODBC数据源SQL Server连接-用户登录失败
我已将数据库从SQL 2005移至具有SQL 2008的服务器。 我现在正在尝试创建ODBC数据源。 我正在使用“通过SQL Server身份验证使用用户输入的登录ID和密码”,并且已经输入了我的登录名和密码。登录名在SQL Server Management Studio中的“安全性”->“登录名”下可见。 该登录名还包含我的旧服务器中同一登录名的确切属性。输入用户名和密码后,当我点击下一步时,我得到: Connection failed: SQLState: '28000' SQL Server Error: 18456 [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'myUser'. 阅读以下内容后:http : //support.microsoft.com/kb/555332我意识到服务器属性仅设置为“ Windows身份验证模式”,但是即使更改为“ SQL Server和Windows身份验证模式”,我仍然连接问题。我可以连接我的Windows帐户。

3
拒绝访问SQL Server中的信息架构
我正在寻找对SQL Server中的用户/组禁用对sys.tables/的访问的最佳方法Information Schema。 我从2008年发现了这个话题 它显示了一种如何拒绝访问的方法,[sys].[something]如下所示: DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole GO 但是没有办法如何禁用对的访问Information Schema: DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole 这似乎行不通。 如何禁用对information_schema的访问? 还有一种更简单的方法来禁用对所有sys/的访问information_schema吗? 更新: 实际上我不能同时运行以下语句: DENY SELECT ON [sys] …

6
备份SQL Server中的所有数据库
我有一台Microsoft SQL Server 2005数据库服务器。在数据库服务器中,我大约有250个用户数据库。我必须备份所有这些数据库。由于手动进行备份会花费大量时间,因此我正在寻找可以自动对所有250个数据库进行备份的Batch脚本或DB脚本。有人可以帮忙吗?

4
表分区以存档数据
场景: 两个数据库:DB_A和DB_Archive,其中有一个非常大的表,称为tableA。 每天都会将超过60天的记录从DB_A中删除,并移至DB_Archive,主要是为了使事情“分开”,因为过去两个月的记录都在DB_A上严重查询了tableA。 我想摆脱此过程,因为它速度慢且消耗大量资源。我正在考虑在date_Column上使用分区功能在DB_A上实现表分区,并在一个分区上存储所有<2个月的记录,在另一个分区上存储所有> 2个月的记录。我的问题: 如果我有2个不同的数据库,这种情况的行为会如何?如果我在tableA中查询记录> getdate()-30,它将读取归档分区吗? 我以为我也必须对索引进行分区,对吗? 我要如何处理明天我的分区函数将“更改”的事实,我的意思是,如果今天创建该函数(7月2日,其范围将是5月2日,但是明天将是5月3日)。我可以创建动态分区功能吗?

3
SQL Server性能突然下降
我有一个SQL Server 2005,它最近已经变得不可预测,并且我为之why恼。在几秒钟内执行的查询正在更改计划并花费数分钟(花费时间进行全表扫描或索引假脱机)。现在最明显的是,统计数据已过时,导致优化程序感到困惑,但我坚信情况并非如此-首先,因为基础数据没有发生重大变化(例如,将一年的数据添加到一年的数据之上)已经存在于表格中),其次是因为“自动创建统计信息”和“自动更新统计信息”均为true。然而,优化器变得混乱了。在Tuning Advisor中运行SQL给了我许多CREATE STATISTICS似乎可以解决它的多列语句(直到下一个SQL行为异常)。 有什么我可以用来解决根本原因的策略构想吗?为什么“正常”统计数据还不够?

2
如何在不安装新实例的情况下在MS SQL 2005中更改实例名称?
我有一个实例,实际上没有任何内容,只是安装了一个实例(它原本用于一个项目,但实际上从未在此服务器上完成,该项目在另一台服务器上重复完成了),所以既然有了该实例,我想重命名。 能做到吗?我该怎么办? 进一步调查(搜索)说,这实际上是不可能的。与我的同事进行的其他协商表明,我不妨安装2k8实例并继续前进。

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.