Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come inserire in una tabella temporanea le informazioni fornite da RESTORE FILELISTONLY / HEADERONLY / VERIFYONLY

Personalmente, questo è uno scenario in cui eviterei TSQL puro e utilizzerei uno script o un programma esterno. A seconda di ciò che stai cercando di fare, potresti scoprire che l'utilizzo di Smo da Powershell o .NET evita comunque completamente la necessità di TSQL. Lo dico perché lavorare con i backup sembra portare sempre a lavorare con file al di fuori del database, e quindi TSQL è semplicemente troppo imbarazzante.

Detto questo, se sei sicuro di doverlo fare in TSQL, allora puoi fare qualcosa del genere:

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

O per essere un po' più gentili:

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

Dovresti comunque creare prima il tavolo, il che non è un grosso problema e ha comunque senso se lo fai spesso. La documentazione in linea elenca il tipo di dati per ogni colonna nel set di risultati, ma almeno per me (SQL2008 SP1) la documentazione non corrisponde al set di risultati effettivo, quindi potrebbe essere necessario modificarlo.