如何从 sp_MSforeachdb 中排除 tempdb?

How to exclude tempdb from sp_MSforeachdb?

下面我有一个代码来获取有关服务器中每个数据库的 t-log 备份的信息。我想从这个列表中排除 tempdb。

exec sp_MSforeachdb 'SELECT server_name, sysdb.name AS DatabaseName, bkup.user_name AS [User],
ceiling(bkup.backup_size /1048576) as ''Size Meg'' ,
cast((bkup.backup_size /1073741824) as decimal (9,2)) as ''Gig'',
bkup.backup_start_date AS [Backup Started],
bkup.backup_finish_date AS [Backup Finished (Last BackUp Time)],
CAST((CAST(DATEDIFF(s, bkup.backup_start_date, bkup.backup_finish_date) AS int))/3600 AS varchar) + '' hours, ''
+ CAST(DATEDIFF(mi, bkup.backup_start_date, bkup.backup_finish_date) - (DATEDIFF(mi, bkup.backup_start_date, bkup.backup_finish_date)/60)*60 AS varchar) + '' minutes, ''
+ CAST((CAST(DATEDIFF(s, bkup.backup_start_date, bkup.backup_finish_date) AS int))%60 AS varchar)+ '' seconds'' AS [Total Time]
,DATEDIFF(DAY,CONVERT(CHAR(8),backup_finish_date,112),CONVERT(CHAR(8),expiration_date,112)) AS expiration_days
,bms.description AS [Description]
,bkup.is_damaged AS isDamaged
,bms.is_compressed AS isCompressed
,bkup.is_copy_only AS isCopyOnly
,bkup.database_creation_date AS DatabaseCreationDate
,bmf.physical_device_name AS PhysicalDeviceName
,CASE WHEN (bkup.backup_start_date is NULL OR bkup.backup_start_date < DATEADD(dd,-1,GetDate()) ) THEN ''Yes'' ELSE ''No'' END AS isOlderThan24Hours
,bkup.database_backup_lsn
,bkup.differential_base_lsn
,bkup.first_lsn
,bkup.last_lsn
,bkup.fork_point_lsn
FROM master.dbo.sysdatabases sysdb
LEFT OUTER JOIN msdb.dbo.backupset bkup ON bkup.database_name = sysdb.name
INNER JOIN msdb.dbo.backupmediafamily AS bmf ON bkup.media_set_id = bmf.media_set_id
LEFT outer JOIN sys.backup_devices AS bd ON bmf.device_type = bd.type
LEFT outer JOIN msdb.dbo.backupmediaset AS bms ON bkup.media_set_id = bms.media_set_id
--WHERE backup_finish_date = (SELECT MAX(bkup.backup_finish_date) FROM  msdb.dbo.backupset bkup WHERE sysdb.name = bkup.database_name) --Last backup
WHERE backup_finish_date > DATEADD(DAY, -1, (getdate()))  -- Last 60 days
AND bkup.type=''L''
AND sysdb.name = ''?''
ORDER BY backup_start_date DESC, backup_finish_date';

我试着写 'IF ''?'' NOT IN (''tempdb'') SELECT.......' 但只有一个数据库的所有结果都是相同的.然后我尝试写 AND sysdb.name <> ''tempdb'''' 但它给出了一个错误:

Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.
Msg 102, Level 15, State 1, Line 32
Incorrect syntax near 'DES'.

那样只能使用2000个字符 您使用了您允许使用的所有字符 只需删除一些别名或使用更短的别名