Reputation: 729
i want to join 2 queries
- give all database name except tempdb
select * from sys.sysdatabases where dbid <>4
output for first query example
name dbid sid mode status status2 crdate reserved category cmptlevel filename version
master 1 0x01 0 65544 1090520064 2003-04-08 09:13:36.390 1900-01-01 00:00:00.000 0 110 E:\Program Files\Microsoft SQL Server\MSSQL11.SQL372\MSSQL\DATA\master.mdf 706
model 3 0x01 0 65544 1090519040 2003-04-08 09:13:36.390 1900-01-01 00:00:00.000 0 110 E:\Program Files\Microsoft SQL Server\MSSQL11.SQL372\MSSQL\DATA\model.mdf 706
msdb 4 0x01 0 65544 1627390976 2012-02-10 21:02:17.770 1900-01-01 00:00:00.000 0 110 E:\Program Files\Microsoft SQL Server\MSSQL11.SQL372\MSSQL\DATA\MSDBData.mdf 706
UMRdb 5 0x01 0 65544 1627389952 2016-04-01 14:43:41.383 1900-01-01 00:00:00.000 0 100 E:\Program Files\Microsoft SQL Server\MSSQL11.SQL372\MSSQL\Data\UMRdb_data.mdf 706
BMCIMPACT 7 0x01 0 65544 1090519040 2016-08-28 08:11:35.023 1900-01-01 00:00:00.000 0 110 F:\Program Files\Microsoft SQL Server\MSSQL11.SQL372\MSSQL\Data\BMCIMPACT.mdf 706
ETXEXTDTP 8 0xD9B3D21CB279234BAEED922D086A16F1 0 65544 1090519040 2016-04-04 14:19:27.387 1900-01-01 00:00:00.000 0 110 F:\Program Files\Microsoft SQL Server\MSSQL11.SQL372\MSSQL\Data\ ETXEXTDTP.mdf 706
ETXSMILEP 9 0x01 0 65544 1090519040 2016-08-20 05:05:51.913 1900-01-01 00:00:00.000 0 110 F:\Program Files\Microsoft SQL Server\MSSQL11.SQL372\MSSQL\Data\ETXSMILEP_data.mdf 706
--give database name whose backup has been taken
select bs.database_name,bs.backup_finish_date,bs.user_name,bmf.physical_device_name
from msdb..backupset bs inner join msdb..backupmediafamily bmf
on bs.media_set_id=bmf.media_set_id
where bs.type='D' and bs.backup_finish_date>=GETDATE()-1
order by bs.backup_finish_date desc
output for second query
ETXEXTDTP 2018-02-19 23:18:11.000 METNET\maestromet J:\dump_data\AV-RISCVMSQL372\SQL372\db_dump\AV-RISCVMSQL372$SQL372_ETXEXTDTP_FULL_20180219_231552.bak
BMCIMPACT 2018-02-19 23:12:21.000 METNET\maestromet J:\dump_data\AV-RISCVMSQL372\SQL372\db_dump\AV-RISCVMSQL372$SQL372_BMCIMPACT_FULL_20180219_230005.bak
msdb 2018-02-19 23:00:05.000 METNET\maestromet J:\dump_data\AV-RISCVMSQL372\SQL372\db_dump\AV-RISCVMSQL372$SQL372_msdb_FULL_20180219_230005.bak
model 2018-02-19 23:00:05.000 METNET\maestromet J:\dump_data\AV-RISCVMSQL372\SQL372\db_dump\AV-RISCVMSQL372$SQL372_model_FULL_20180219_230005.bak
master 2018-02-19 23:00:04.000 METNET\maestromet J:\dump_data\AV-RISCVMSQL372\SQL372\db_dump\AV-RISCVMSQL372$SQL372_master_FULL_20180219_230004.bak
when we check second query database of one database has not been backed up
i need to join these 2 queries and need database name which does not come in second query mean database whose backup not taken
so there are 2 databases missinbg one is umrdb and other is ETXsMILEP i would like to get those two names in query.
Upvotes: 0
Views: 52
Reputation: 4039
This could be what you need, a left join from your databases with the ones that have been backed up to only select the ones where no match exists, which means no backup has been taken, as below:
with cte_backup as
(
select bs.database_name,bs.backup_finish_date,bs.user_name,bmf.physical_device_name
from msdb..backupset bs inner join msdb..backupmediafamily bmf
on bs.media_set_id=bmf.media_set_id
where bs.type='D' and bs.backup_finish_date>=GETDATE()-1
)
select s.*
from sys.sysdatabases s left join cte_backup c on c.database_name = s.name
where s.dbid <> 4
and c.database_name is null -- no backup has been taken
Upvotes: 1
Reputation: 4146
If I understood correctly you need to use exists
select *
from
sys.sysdatabases sd
where
dbid <> 4
and not exists (
select
bs.database_name,bs.backup_finish_date,bs.user_name,bmf.physical_device_name
from
msdb..backupset bs
inner join msdb..backupmediafamily bmf
on bs.media_set_id=bmf.media_set_id
where
bs.type='D'
and bs.backup_finish_date>=GETDATE()-1
and bs.database_name = sd.name
)
Upvotes: 1