据我所知,我有一个独特的问题。我想知道是否有一种方法可以构造一个查询,其中实际 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 数据库中的两个表相当于 500M 行和 350GB 的数据。磁盘空间是我们保留备份和执行备份的时间的问题。我们计划截断这两个表。
我知道要回收磁盘空间,我们需要在截断后缩小数据库,然后进行索引重建以修复碎片索引。但由于我们不确定重建需要多长时间(我们现在正在 Azure 中启动一个测试服务器 VM 进行测试),同时我们正在寻找增量收益。在截断之后(在收缩和重建之前),备份时间和生成的备份文件大小(7z 压缩之后)是否会因此而显着减少?
在 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><deadlock>
<victim-list>
<victimProcess id="process3cf048"/>
</victim-list>
<process-list>
<process …Run Code Online (Sandbox Code Playgroud) 我一直在尝试编写一个函数来检查一个字符串是否包含一个数字,而该数字不是更大数字的一部分(换句话说,如果要搜索的数字是 '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) 我刚刚找到了一份分析师的新工作,但我\xe2\x80\x99m 的任务是执行管理员任务,只是在寻找洞察力。
\n我们有一台 Windows Server 2003(32 位),其中有 Microsoft SQL Server 2005。我的任务是将其升级到最新的 Windows 和 SQL Server。
\n由于 sql 服务器和主机操作系统多年来一直不受支持,我认为创建新服务器并在新服务器上恢复数据库备份可能会更容易。\n我的问题是:
\n相关信息
\n我有工作来修剪用于历史记录和日志记录的表格,以便保持它们的整齐。我想确保我不会忽略日志文件。
我可以或应该怎么做以及如何检查日志文件?
我每晚运行的 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 2005 数据库,它们已经存在了很长时间,并且由于各种原因经历了事务日志自动增长。定期备份现在可以控制事务日志的使用,但文件仍然很大且碎片化。
我想通过减少 VLF 的数量来回收一些空间并提高性能。但是,我也不想中断我们的预定备份。DBCC SHRINKFILE() 如何影响事务日志备份链?或者是吗?如果我将 TRUNCATEONLY 添加到命令中,这会改变吗?
请注意,这是一次性修复。我很清楚,定期缩小日志文件是一件坏事——如果这些数据库配置了合理的初始大小和自动增长设置,并且备份在其历史记录的每一天都完美运行,这将不是问题。
我们有一个带有 SP4、x86 的 SQL Server 2005。当我们尝试进行差异备份时,我们收到以下错误消息。
无法对数据库“ABCD”执行差异备份,因为当前的数据库备份不存在。通过重新发出 BACKUP DATABASE 执行完整的数据库备份,省略 WITH DIFFERENTIAL 选项。[SQLSTATE 42000](错误 3035)BACKUP DATABASE 异常终止。
对解决此问题的任何帮助表示赞赏
我有一些 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)
这可以用于多个选择语句吗?
我有一个使用事务复制复制的数据库。现在,我想将该数据库的一些数据备份到另一个分区,因为我的服务器磁盘空间不足。
我试图通过单击表中的设计和属性选项卡将“常规数据空间规范”更改为“次要”,使用 GUI 收费通过 SSMS 将文件移动到另一个文件组。当我尝试保存表格的设计时I get error Cannot drop the table 'dbo.MYTABLE' because it is being used for replication.
这里有几个问题:
sql-server-2005 ×10
sql-server ×7
backup ×2
condition ×1
dbcc ×1
deadlock ×1
logs ×1
replication ×1
substring ×1
t-sql ×1