Servidor SQL "restaurar a sequência FILELISTONLY"
Quando eu executar a seguinte declaração no estúdio de gestão SS;
EXEC('RESTORE FILELISTONLY FROM DISK = ''C:\backup.bak''')
tenho um resultado definido numa grelha e também posso usar
INSERT INTO <temp_table>
EXEC('RESTORE FILELISTONLY FROM DISK = ''C:\backup.bak''')
Para preencher uma mesa temporária. No entanto, eu recebo erro de sintaxe, quando eu tento selecionar a partir desse conjunto de resultados. e. g
SELECT * FROM
EXEC('RESTORE FILELISTONLY FROM DISK = ''C:\backup.bak''')
Os meta-dados do conjunto de resultados devem ser guardados algures no dicionário do servidor de SQL. Encontrei outro. fórmula de band-aid para que a minha restauração automática funcione, mas se puder chegar ao resultado, eu criaria uma solução mais elegante. Note também que o resultado é diferente em 2008 do que em 2005.
Obrigado antecipadamente...2 answers
Não podes seleccionar o EXEC. Você só pode inserir em uma tabela (ou variável da tabela) o conjunto de resultados de um EXEC.
Quanto à automatização da restauração, a resposta em restauração totalmente automatizada do servidor SQL já lhe dá tudo o que precisa para criar uma solução. Se a restauração automatizada de bancos de dados com lista de arquivos desconhecidos é algo a ser tentado, que é um tópico diferente.
Beco sem saída: SELECT INTO
é bom porque você não tem que definir as colunas da tabela, mas não suporta EXEC
.
Solução: INSERT INTO
suporta EXEC
, mas requer que a tabela seja definida. Usando a definição de SQL 2008 fornecida pelo MSDN , escrevi o seguinte programa:
DECLARE @fileListTable TABLE (
[LogicalName] NVARCHAR(128),
[PhysicalName] NVARCHAR(260),
[Type] CHAR(1),
[FileGroupName] NVARCHAR(128),
[Size] NUMERIC(20,0),
[MaxSize] NUMERIC(20,0),
[FileID] BIGINT,
[CreateLSN] NUMERIC(25,0),
[DropLSN] NUMERIC(25,0),
[UniqueID] UNIQUEIDENTIFIER,
[ReadOnlyLSN] NUMERIC(25,0),
[ReadWriteLSN] NUMERIC(25,0),
[BackupSizeInBytes] BIGINT,
[SourceBlockSize] INT,
[FileGroupID] INT,
[LogGroupGUID] UNIQUEIDENTIFIER,
[DifferentialBaseLSN] NUMERIC(25,0),
[DifferentialBaseGUID] UNIQUEIDENTIFIER,
[IsReadOnly] BIT,
[IsPresent] BIT,
[TDEThumbprint] VARBINARY(32) -- remove this column if using SQL 2005
)
INSERT INTO @fileListTable EXEC('RESTORE FILELISTONLY FROM DISK = ''YourBackupFile.bak''')
SELECT * FROM @fileListTable