标签: sql-server-2005

条件 WHERE 子句

据我所知,我有一个独特的问题。我想知道是否有一种方法可以构造一个查询,其中实际 where 子句本身的存在是有条件的。

我正在编写一个存储过程,我想在其中传递一个过滤器(例如Col1=1 or Col2=3),并且我的查询如下所示:

set @filter = 'Col1=1 or Col2=3' --assume these variables have been declared already
select * from @tbl where @filter --I need to use a table variable
Run Code Online (Sandbox Code Playgroud)

注意:我尝试使用sp_executesqlandsp_sqlexec但都不采用表变量。我还想避免使用if-else声明。请不要建议其中任何一个作为您的答案。:)

sql-server-2005 sql-server condition

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

截断大表后数据库备份时间和大小会减少吗

我们的 SQL Server 数据库中的两个表相当于 500M 行和 350GB 的数据。磁盘空间是我们保留备份和执行备份的时间的问题。我们计划截断这两个表。

我知道要回收磁盘空间,我们需要在截断后缩小数据库,然后进行索引重建以修复碎片索引。但由于我们不确定重建需要多长时间(我们现在正在 Azure 中启动一个测试服务器 VM 进行测试),同时我们正在寻找增量收益。在截断之后(在收缩和重建之前),备份时间和生成的备份文件大小(7z 压缩之后)是否会因此而显着减少?

sql-server-2005 sql-server backup

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

可以从 SQL Server 2008 中的环形缓冲区中提取的死锁 xml 创建图表吗?

在 SQL_Server 的更高版本中,我们在对象浏览器中查看事件文件以查看死锁图。这个特定的客户端有 SQL 2008(兼容性 2005),并且使用以下脚本从环形缓冲区中提取了唯一的死锁副本:

SELECT
   xed.value('@timestamp', 'datetime2(3)') as CreationDate,
   xed.query('.') AS XEvent
FROM
(
   SELECT CAST([target_data] AS XML) AS TargetData
   FROM sys.dm_xe_session_targets AS st
   INNER JOIN sys.dm_xe_sessions AS s
      ON s.address = st.event_session_address
   WHERE s.name = N'system_health'
         AND st.target_name = N'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData (xed)
ORDER BY CreationDate DESC
Run Code Online (Sandbox Code Playgroud)

该格式与我们的 xdl 查看器不兼容。有没有办法从下面返回的 XML 中获取图表?:

<event name="xml_deadlock_report" package="sqlserver" id="123" version="1" timestamp="2018-07-04T00:15:14.667Z">
  <data name="xml_report">
    <type name="unicode_string" package="package0" />
    <value>&lt;deadlock&gt;
 &lt;victim-list&gt;
  &lt;victimProcess id="process3cf048"/&gt;
 &lt;/victim-list&gt;
 &lt;process-list&gt;
  &lt;process …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server-2008 sql-server deadlock

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

试图检查一个字符串是否只包含一个数字

我一直在尝试编写一个函数来检查一个字符串是否包含一个数字,而该数字不是更大数字的一部分(换句话说,如果要搜索的数字是 '6' 而字符串是 '7+16+2'它应该返回 false,因为这个字符串中的 '6' 是数字 '16' 的一部分)

我写了下面的函数(它很长,但我打算在重构之前先测试它)

在测试时,我发现了一个错误,它仅通过逻辑运行找到的数字的第一个实例。因此,使用 '6' 对 '16+7+9+6' 运行此函数将返回 false,因为它确定第一个 '6' 是更大数字的一部分并停止处理。

我认为要解决这个问题,我必须实现一个循环来缩短 'haystack' 字符串(这样,使用示例 '16+7+9+6',该函数在消除后继续检查 '+7+9+6'第一个“6”)但在花时间使已经复杂的函数变得更加复杂之前,我想检查是否有更简单的方法来实现相同的目标?

drop function dbo.runners_contain_runner
go
create function dbo.runners_contain_runner(@runner varchar(max), @runners varchar(max))
returns int
as 
begin

    /*
    eliminate the plus sign from @runners so that the 
    'isnumeric' function doesn't return false positives (it returns 1 for '+') 
    */
    set @runners = replace(@runners,'+','_' ) 


    declare @ret int;
    set @ret = 0;

    -- if the runner is the only runner return …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server t-sql pattern-matching substring

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

升级不再支持 Microsoft SQL 实例多个问题?

我刚刚找到了一份分析师的新工作,但我\xe2\x80\x99m 的任务是执行管理员任务,只是在寻找洞察力。

\n

我们有一台 Windows Server 2003(32 位),其中有 Microsoft SQL Server 2005。我的任务是将其升级到最新的 Windows 和 SQL Server。

\n

由于 sql 服务器和主机操作系统多年来一直不受支持,我认为创建新服务器并在新服务器上恢复数据库备份可能会更容易。\n我的问题是:

\n
    \n
  1. 可以恢复 32 位 SQL Server 备份的最新操作系统和 SQL Server 版本是什么?(新操作系统和 SQL 服务器将是 64 位)
  2. \n
  3. 如果操作系统和 SQL 服务器都是 64 位,与数据库交互时我是否仍会受到 4GB RAM 的限制?或者操作系统的版本决定了内存?
  4. \n
  5. 我可以备份整个实例(最好使用本地用户信息)还是单独备份每个数据库?
  6. \n
  7. 如果您有类似的经历,您建议我要注意的第一件事是什么?
  8. \n
\n

相关信息

\n
    \n
  • 新旧服务器都是我通过VMware创建的VM\xe2\x80\x99s
  • \n
  • 许可不是一个因素,所以如果我需要多个步骤也没关系
  • \n
  • 几十个使用 Windows 10&11 以及 Ubuntu 16、18、20 和 22 的用户与 sql server 进行交互
  • \n
\n

sql-server-2005 sql-server windows-server

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

有一个 92MB 的 MDF 和一个 58MB 的 LDF cobo 好吗?如何管理日志以保持运行良好?

我有工作来修剪用于历史记录和日志记录的表格,以便保持它们的整齐。我想确保我不会忽略日志文件。

我可以或应该怎么做以及如何检查日志文件?

我每晚运行的 sql 脚本是:

declare @DBname varchar(500)
set @DBname = 'E:\Database\backup\PMIS_backup_'+ convert(varchar(MAX), getdate(), 23 ) +'.bak'

BACKUP DATABASE [PMIS] TO  DISK = @DBname
WITH NOFORMAT, NOINIT,  NAME = @DBname
, SKIP, REWIND, NOUNLOAD,  STATS = 10
Run Code Online (Sandbox Code Playgroud)

(恢复方式很简单)

sql-server-2005 logs

2
推荐指数
1
解决办法
137
查看次数

DBCC SHRINKFILE() 如何影响备份?

我有一堆 SQL 2005 数据库,它们已经存在了很长时间,并且由于各种原因经历了事务日志自动增长。定期备份现在可以控制事务日志的使用,但文件仍然很大且碎片化。

我想通过减少 VLF 的数量来回收一些空间并提高性能。但是,我也不想中断我们的预定备份。DBCC SHRINKFILE() 如何影响事务日志备份链?或者是吗?如果我将 TRUNCATEONLY 添加到命令中,这会改变吗?

请注意,这是一次性修复。我很清楚,定期缩小日志文件是一件坏事——如果这些数据库配置了合理的初始大小和自动增长设置,并且备份在其历史记录的每一天都完美运行,这将不是问题。

sql-server-2005 sql-server dbcc

2
推荐指数
1
解决办法
2006
查看次数

SQL Server 2005 SP4 差异备份失败

我们有一个带有 SP4、x86 的 SQL Server 2005。当我们尝试进行差异备份时,我们收到以下错误消息。

无法对数据库“ABCD”执行差异备份,因为当前的数据库备份不存在。通过重新发出 BACKUP DATABASE 执行完整的数据库备份,省略 WITH DIFFERENTIAL 选项。[SQLSTATE 42000](错误 3035)BACKUP DATABASE 异常终止。

对解决此问题的任何帮助表示赞赏

sql-server-2005 backup

2
推荐指数
1
解决办法
405
查看次数

通过 SQL Server 中的数据库邮件进行健康检查

我有一些 SQL 脚本,希望每天在我的 SQL Server 上运行。如何多次查询并获得类似于以下内容的输出:

Health check for <server>

Query Title 1:

<query results 1>


Query Title 2:

<query results 2>
Run Code Online (Sandbox Code Playgroud)

我正在检查诸如上次良好备份、正常运行时间等内容,因此它们彼此不相关。我计划在 SQL Server 作业中使用 sp_send_db_mail。这是完成这项任务的最佳方式吗?

理想情况下,我只想要一封电子邮件。

更新

经过多年的战斗!!!到目前为止,我找到的解决方案是将其放入存储过程,然后像这样执行存储过程:

EXEC msdb.dbo.sp_send_dbmail
        @recipients = N'<email>',
        @body = @body, 
        @subject = @subjectt,
        @profile_name = @ProfileName,
        @query ='exec test..sp_checks'
Run Code Online (Sandbox Code Playgroud)

这可以用于多个选择语句吗?

sql-server-2005 sql-server-2008

2
推荐指数
1
解决办法
421
查看次数

如何在不破坏复制的情况下将数据从主数据文件移动到其他数据文件

我有一个使用事务复制复制的数据库。现在,我想将该数据库的一些数据备份到另一个分区,因为我的服务器磁盘空间不足。

我试图通过单击表中的设计和属性选项卡将“常规数据空间规范”更改为“次要”,使用 GUI 收费通过 SSMS 将文件移动到另一个文件组。当我尝试保存表格的设计时I get error Cannot drop the table 'dbo.MYTABLE' because it is being used for replication.

这里有几个问题:

  • 我应该在现有文件组“PRIMARY”的另一个分区中创建数据文件,还是打开新文件组而不是在新的“辅助”文件组中打开新数据文件更好?
  • 除了删除表之外,还有其他方法可以告诉 SQL 将数据保存到另一个文件吗?
  • 有没有办法可以在将某些表移动到另一个文件组时暂时从复制中排除它们,然后将它们再次放入快照中而无需重新初始化订阅者?

replication sql-server-2005 data-warehouse sql-server

2
推荐指数
1
解决办法
3437
查看次数