Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So fügen Sie die Informationen von RESTORE FILELISTONLY / HEADERONLY / VERIFYONLY in eine temporäre Tabelle ein

Persönlich ist dies ein Szenario, in dem ich reines TSQL vermeiden und ein externes Skript oder Programm verwenden würde. Je nachdem, was Sie zu tun versuchen, stellen Sie möglicherweise fest, dass die Verwendung von Smo aus Powershell oder .NET sowieso die Notwendigkeit von TSQL vollständig vermeidet. Ich sage das, weil die Arbeit mit Backups immer dazu führt, mit Dateien außerhalb der Datenbank zu arbeiten, und dann ist TSQL einfach zu umständlich.

Wenn Sie sich jedoch sicher sind, dass Sie dies in TSQL tun müssen, können Sie Folgendes tun:

insert into dbo.BackupFiles (LogicalName, PhysicalName, ...)
exec('RESTORE FILELISTONLY FROM DISK = ''c:\Test\Test.bak''')

Oder um es etwas netter zu machen:

declare @Command nvarchar(4000)
-- you can build the command string some other way, of course
set @Command = N'RESTORE FILELISTONLY FROM DISK = ''c:\Test\Test.bak'''

insert into dbo.BackupFiles (LogicalName, PhysicalName, ...)
exec sp_executesql @Command

Die Tabelle müssten Sie aber trotzdem erst erstellen, was keine große Sache ist und bei häufigem Einsatz sowieso Sinn macht. Books Online listet den Datentyp für jede Spalte in der Ergebnismenge auf, aber zumindest für mich (SQL2008 SP1) stimmt die Dokumentation nicht mit der tatsächlichen Ergebnismenge überein, sodass Sie sie möglicherweise anpassen müssen.