标签: sql-server-2005

SQL Server 2012 中缺少系统表

我将 SQL Server 2000 数据库恢复到 2005 年,然后恢复到 2012 年。我现在看不到 SQL Server 2000 中存在的系统表。

为什么?

sql-server-2005 sql-server sql-server-2000 sql-server-2012

3
推荐指数
1
解决办法
1548
查看次数

检查 2 个表/查询的所有记录列是否相等

在 SQL Server 2005 中,我想做一个查询来检查 2 个表的所有记录列是否相同,例如:

declare @tbl1 table(col nvarchar(50))
declare @tbl2 table(col nvarchar(50))

insert into @tbl1
    select '11' union select '22'
insert into @tbl2
    select '22' 
--should return false
Run Code Online (Sandbox Code Playgroud)
declare @tbl1 table(col nvarchar(50))
declare @tbl2 table(col nvarchar(50))

insert into @tbl1
    select '11' 
insert into @tbl2
    select '11' union select '22'
--should return false
Run Code Online (Sandbox Code Playgroud)
declare @tbl1 table(col nvarchar(50))
declare @tbl2 table(col nvarchar(50))

insert into @tbl1
    select '11' union select '22'
insert into @tbl2
    select '11' union select '22'
--should …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005

3
推荐指数
1
解决办法
6350
查看次数

无需编译即可创建/更改存储过程

是否可以在 SQL Server 2005* 中创建或更改不编译该过程的存储过程?

(* - 是的,不幸的是,我们仍然需要支持 2005 作为我们的最低标准)

我有一种情况,能够创建/更改语法上有效但语义上无效的存储过程(由于不正确的表/列名称)将非常有用……然后我可以在 SSMS 中进行相应的更改。

我刚刚有了一个想法,这是一个非常简单的解决方案......在更改/创建存储过程时注释掉它的全部内容。

UsingCtrl+K Ctrl+C将单独注释掉每一行 - 这比/* */在整个事物周围使用更好,因为如果/* */存储过程中已经有任何实例,那将会失败。

我仍然很想知道是否有一种实际的方法可以告诉 SSMS 忽略无效的表/视图/列名称。

感谢@marcelo 的回答,使用不存在的表的名称似乎确实允许您创建存储过程。

但是,如果您使用现有表中不存在的,则不允许您创建存储过程

sql-server-2005 sql-server

3
推荐指数
1
解决办法
9515
查看次数

一种自动清除/重新启动虚拟内存蠕变的方法?

我知道这样做不是很好的做法,但我的公司负担不起我试图为我们的问题找到合适的解决方案。我读过这篇文章,我可以用 SQL Server 2005 做同样的事情,但我希望有更好(更快?)的方法。

问题如下:

我们有一个在 Windows Server 2003 上运行的 ASP.net 网站 (ASP2),它也托管我们的 SQL Server 2005 数据库并安装。

最近,我们注意到 SQL Server 2005 实例的 VM 已提交内存空间增长,几乎达到了我们设置为 1.7 GB 的 VM 保留空间(嗯太多了?)。

运行 SQL Server 的 PC 服务器有 4 GB 的 RAM 和最多 3.5 GB 的可用磁盘空间,用于 SQL Server 2005 安装。数据库本身在 350 GB 共享上(有两个分区:分别是 C 和 D 驱动器)。

因此,在 VM 空间方面,我原以为我们有足够的空间并且将 VM 限制设置为 1.7 GB(理想情况下为 2 GB)就足够了。

数据库本身的大小不到 500 MB。

当我们的 VM Committed 值接近 VM Reserved 值时,服务会显着减慢。我知道的唯一方法是停止所有 SQL 服务服务并重新启动它们。但是在 24 小时内,VM …

sql-server-2005 sql-server memory

3
推荐指数
1
解决办法
6589
查看次数

从具有非常少量扩展空间的表中删除行

我有多个表备份了数据,现在暂时删除旧数据,由于空间限制,目前无法选择存档。我试过运行以下命令:

WHILE 1 = 1 
BEGIN 
    DELETE TOP ( 4000 )
    FROM    [OLD_TABLE] WITH (TABLOCKX)
    WHERE   [Date] < '2014-01-01 00:00:00'
    IF @@ROWCOUNT = 0 
        BREAK    
END
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但非常缓慢……比如 17 多个小时,并且只删除了约 140,000 行。

这里的关键是这张表,其他需要减少的表非常大,大约有 50-6000 万行,大约有 16-17 GB 的空间。物理磁盘上只剩下 20 GB 的空间。我已经考虑将我想要保留的数据放在中间表中,截断和重新填充,但我担心在这些操作完成时我们会用完磁盘上的空间。这是一个生产数据库。我继承了这个烂摊子,我正在尝试清理它并试图清理这个数据库,这样我们就可以保持功能,直到我们可以安装新硬件。

是否有任何我(数据库管理的相对新手)没有遇到过的方法可以让我以更快、更有效的方式执行此操作?

*表名和列名已匿名。

编辑

查询执行计划

sql-server-2005 sql-server delete transaction-log

3
推荐指数
1
解决办法
147
查看次数

无法在 Sql server 2005 中启动 SQL Server Browser 服务

我们无法在我们的一台机器上启动 SQL 浏览器服务,并出现以下错误:

错误

我相信这就是为什么我们无法连接到具有以下错误的实例的原因:

在此处输入图片说明

我试图排除故障所提到这里,通过更改注册表值从1到0,但仍没有运气。

SQLservices 也在运行。

请帮助如何解决这个问题!

@Mark- 提供运行命令后的截图:

屏幕

关联

sql-server-2005 sql-server

3
推荐指数
1
解决办法
593
查看次数

如何将 varchar 值列表插入到单列表中?

在 SQL Server 2005 中:

CREATE TABLE __RADHE
(
    itemNo varchar(10) not null primary key clustered
);
GO

INSERT INTO __RADHE ???

'34926840', '34927020', '34927202', '34927384', '34927566',
'34927830', '34927889', '34930743', '34930750', '34927897',
'34927848', '34927574', '34927392', '34927210', '34927038',
'34926857', '34917120', '34917286', '34917443', '34926865',
'34927046', '34927228', '34927400', '34927582', '34927855',
'34927905', '34930768', '34930776', '34927913', '34927863',
'34927590', '34927418', '34927236', '34927053', '34926873',
'34917450', '34917294', '34917138', '34917146', '34917302',
'34917468', '34926881', '34927061', '34927244', '34927426',
'34927608', '34927871', '34927921', '34930784', '34927616',
'34927434', '34927251', '34927079', '34926899', '34917476',
'34917310', '34917153', '34917161', …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server insert

3
推荐指数
1
解决办法
3万
查看次数

Find the days difference between two dates per month

I have a table 'data' in which there are two columns i.e. Startdate and Enddate.

Startdate is the date when an employee joined working in a company and Enddate is the date when he left. I need to find the working days of employee per month.

If the Startdate is '2015-06-21' and the Enddate is '2015-08-21' then the working days will be:

June 10days
July 31days
August 21days
Run Code Online (Sandbox Code Playgroud)

I have the query for the total days for the work:

Select …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server

3
推荐指数
2
解决办法
2800
查看次数

重新附加从 RAID 5 恢复的 MDF 文件

我们公司多年来一直在运行 SQL Server 2005 服务器,但就在最近,我们遇到了一些麻烦。服务器配置了 RAID 5,阵列中有一个热备盘。其中一个磁盘出现故障,不久之后第二个磁盘也出现故障。不幸的是,我们没有对大部分数据进行备份(请不要说“应该有备份”的评论——我知道一个可靠的备份计划的重要性)。

所以我们两个磁盘都挂了,我们没有正式的 DBA,数据库也无法访问。我们的一名 IT 人员试图恢复 RAID 阵列,我们认为 RAID 开始重建,但他被命令将其关闭,因为担心在 RAID 重建期间可能会丢失数据。

我们将整个服务器发送给了一家数据恢复公司。他们花了两周时间在服务器上工作,首先对所有驱动器进行成像,然后从 RAID 重建数据。

我收到了一个包含所有“恢复”文件的硬盘。这是主要是数据库文件 (MDF) 和传输日志 (LDF) 的集合。服务器上的每个数据库仅包含一个 MDF 和一个 LDF。我目前无法访问原始服务器,因此我一直试图将这些数据库附加到另一台运行 SQL Server 2005 的服务器。但是,当我尝试重新附加任何数据库时,我遇到了问题。我收到的一些错误如下所示。我没有运气恢复任何这些文件。我按照本文中概述的步骤操作,即使那样也无法恢复任何文件。

我们向数据恢复公司支付了一大笔钱,用于从这台服务器恢复数据,我的任务是毫无疑问地证明这些数据对我们有用或没用。我只是没有确切的经验,所以我向你提出了一个问题,dba.stackexchange: 有没有办法恢复这些文件?

SQL Server 检测到基于逻辑一致性的 I/O 错误:pageid 不正确(预期为 1:134;实际为 0:0)。它发生在读取文件 'G:\Data\Data201309.mdf' 中偏移量 0x0000000010c000 处的数据库 ID 17 中的页面 (1:134) 期间。SQL Server 错误日志或系统事件日志中的其他消息可能会提供更多详细信息。这是威胁数据库完整性的严重错误情况,必须立即纠正。完成完整的数据库一致性检查 (DBCC CHECKDB)。此错误可能由多种因素引起;有关详细信息,请参阅 SQL Server 联机丛书。


文件“G:\Data\Data201112_log.ldf”的标头不是有效的数据库文件标头。PageAudit 属性不正确。(Microsoft SQL Server,错误:5172)


G:\Data\Data201005.mdf 不是主数据库文件。(Microsoft SQL Server,错误:5171)


处理数据库“Data201008”的日志时出错。如果可能,从备份中恢复。如果备份不可用,则可能需要重建日志。


SQL Server 检测到基于逻辑一致性的 I/O 错误:校验和不正确(预期:0xe9b50f3a;实际:0x162a0f84)。它发生在读取文件“G:\Data\Data200803.mdf”中偏移量 0x000000f9a00000 处的数据库 ID 17 中的页面 …

sql-server-2005 sql-server recovery corruption

3
推荐指数
1
解决办法
921
查看次数

如何从 RAND 函数(或其他地方)获得令人满意的随机数?

我正在为应用程序用户创建一个伪随机数据集进行训练。

我很惊讶,如果我用 1、2、3 等为 RAND() 函数设置种子,我从种子函数中得到几乎相同的结果。但是,当未提供种子时,这似乎是“适当随机”但可重复的值。

SELECT   RAND(1) AS R1A, RAND() AS R1B, RAND(2) AS R2A, RAND() AS R2B,
         RAND(3) AS R3A, RAND() AS R3B, RAND(4) AS R4A, RAND() AS R4B

0.713591993212924

0.472241415009636  

0.713610626184182  

0.217821139260039  

0.71362925915544  

0.963400850719992  

0.713647892126698  

0.708980575436056
Run Code Online (Sandbox Code Playgroud)

乍一看,我似乎可以评估 RAND(@seed) 并丢弃结果,然后评估 RAND() 以获得我的训练数据的几个真正“随机”的数字 - 到目前为止,我计划每条记录使用四个;我可能还需要一些。

那个计划能正常运作吗?而且,我在看什么,在这里?而且,它应该在文档中吗?我还没找到

文档说明了这一点,这可能是一个线索:

RAND 函数是一个伪随机数生成器,其运行方式类似于 C 运行时库 rand 函数。如果没有提供种子,系统会生成自己的可变种子编号。

C 中的 rand 函数是否为相似的种子输入产生相似的输出?

我认为文档还可以更清楚地说明 RAND(@number) 后跟 RAND() 总是生成相同的数字。但这就是我想要的,也是任何有经验的计算机程序员都会期望的。

我想我可以用从https://www.random.org/获得的随机数据键来填充表格以 用于此目的 - 但这有缺点。

更新,临时结论

我对 RAND() 有以下结论,现在我想我会继续下去,但要记住替代方案。

RAND(@int) 使用给定的整数值设置随机数生成器的种子,并返回一个在统计上独立的浮点结果,因为 RAND(@int) 和 RAND(@int+1) …

sql-server-2005 sql-server random sql-server-2014

3
推荐指数
1
解决办法
3227
查看次数