0
クエリを使用して、サーバー上の各データベースの最新のバックアップの詳細を取得しようとしています。テーブルを自分自身に結合するときに不完全な行セットが返される
クエリがある:私はこれを実行すると
WITH CTE_max as
(
SELECT bs2.database_name,MAX(bs2.backup_start_date) as maxdate
FROM msdb.dbo.backupset bs2 GROUP BY database_name
)
SELECT DISTINCT
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
bs1.database_name,
bs1.backup_start_date,
bs1.backup_finish_date,
FROM msdb.dbo.backupset bs1
INNER JOIN CTE_max CTE ON bs1.backup_start_date = CTE.maxdate
ORDER BY
bs1.database_name,
bs1.backup_start_date desc
、それだけでサーバー上のデータベースの約半分の詳細を返します。私は、メインクエリのサブクエリでCTEを置き換えてみて、それらに参加する前にvarcharsに日付をキャストしましたが、結果は同じです。
CTEクエリを単独で実行すると、すべてのデータベースの結果が返されますが、メインクエリで結合されるとすぐに結果の半分が消えます。私はテーブルがそれ自身に結合されているので、これがどのように可能であるかに関していくらか難解です。
アドバイスをいただければ幸いです!
また、database_nameで結合する必要があります。 'distinct'が結果セットを乱しているなら、私は驚くことはありません。 – HoneyBadger
@ HoneyBadgerありがとう、ちょうどそれを試みたが、結果は同じままです。 – Blimbeard
サンプルデータはありますか?理想的には、結果セットに含まれていないCTEで選択されたレコード。 – HoneyBadger