检索 sp_executesql 期间打印的消息
Retrieving messages printed during sp_executesql
我是 运行 通过 sp_executesql
在 SQL 服务器代理中的命令。如何从该命令捕获消息以便将它们记录在 table 中?
特别是我正在尝试截断数据库日志并希望能够查看是否成功。我在代理 SP 中添加代码片段:
IF (@truncate = 1)
BEGIN
SET @msg = 'Truncating log ''' + @description + ''' for the ''' + @db + ''' database'
EXEC _LogInsert 'Information', '_Loop', 'Status', @msg
--PRINT 'Attempting to truncate the log file'
SET @sql = N'USE [' + @db + ']' +
'DECLARE @LogFile varchar(128)' +
'SELECT TOP 1 @LogFile = [Name] ' +
'FROM sys.database_files ' +
'WHERE ([Type_Desc] = ''LOG'')' +
'DBCC SHRINKFILE(@LogFile, EMPTYFILE)' +
'DBCC SHRINKFILE(@LogFile, 10) WITH NO_INFOMSGS'
--PRINT 'truncation attempt finished'
EXEC sp_executesql @sql
-- Capture messages from SP
-- SET @msg = 'Truncating log msg ''' + @resmsg + ''' for the ''' + @db + ''' database'
-- EXEC _LogInsert 'Information', '_Loop', 'Status', @msg
END
如果你运行这是一份工作,你可以从dbo.sysjobhistory:[=15=获取你需要的数据(至少DBCC
输出,或PRINT
) ]
SELECT jh.[run_date],
jh.[step_name],
jh.[message]
FROM msdb.dbo.sysjobhistory jh
INNER JOIN msdb.dbo.sysjobs j
ON j.[name] = 'job_name' and j.job_id = jh.job_id
另外,请注意 WITH NO_INFOMSGS
- 这会抑制所有信息性消息。
我是 运行 通过 sp_executesql
在 SQL 服务器代理中的命令。如何从该命令捕获消息以便将它们记录在 table 中?
特别是我正在尝试截断数据库日志并希望能够查看是否成功。我在代理 SP 中添加代码片段:
IF (@truncate = 1)
BEGIN
SET @msg = 'Truncating log ''' + @description + ''' for the ''' + @db + ''' database'
EXEC _LogInsert 'Information', '_Loop', 'Status', @msg
--PRINT 'Attempting to truncate the log file'
SET @sql = N'USE [' + @db + ']' +
'DECLARE @LogFile varchar(128)' +
'SELECT TOP 1 @LogFile = [Name] ' +
'FROM sys.database_files ' +
'WHERE ([Type_Desc] = ''LOG'')' +
'DBCC SHRINKFILE(@LogFile, EMPTYFILE)' +
'DBCC SHRINKFILE(@LogFile, 10) WITH NO_INFOMSGS'
--PRINT 'truncation attempt finished'
EXEC sp_executesql @sql
-- Capture messages from SP
-- SET @msg = 'Truncating log msg ''' + @resmsg + ''' for the ''' + @db + ''' database'
-- EXEC _LogInsert 'Information', '_Loop', 'Status', @msg
END
如果你运行这是一份工作,你可以从dbo.sysjobhistory:[=15=获取你需要的数据(至少DBCC
输出,或PRINT
) ]
SELECT jh.[run_date],
jh.[step_name],
jh.[message]
FROM msdb.dbo.sysjobhistory jh
INNER JOIN msdb.dbo.sysjobs j
ON j.[name] = 'job_name' and j.job_id = jh.job_id
另外,请注意 WITH NO_INFOMSGS
- 这会抑制所有信息性消息。