Cra*_*ein 5 sql-server restore
将 RESTORE FILELISTONLY 的结果存储在名为 #filepaths 的临时表中。
IF object_id('sp_restore') IS NOT NULL
drop procedure sp_restore
go
CREATE PROCEDURE sp_restore AS
BEGIN
RESTORE FILELISTONLY FROM DISK = 'Z:\BACKUPS\my_database_backup.bak'
END
GO
insert into #filepaths
exec sp_restore
Run Code Online (Sandbox Code Playgroud)
如何将 'Z:\BACKUPS\my_database_backup.bak' 放入变量中?使脚本看起来与此类似。
DECLARE @BACKUP_PATH as nvarchar(max) = 'Z:\BACKUPS\my_database_backup.bak'
IF object_id('sp_restore') IS NOT NULL
drop procedure sp_restore
go
CREATE PROCEDURE sp_restore AS
BEGIN
RESTORE FILELISTONLY FROM DISK = @BACKUP_PATH
END
GO
insert into #filepaths
exec sp_restore
Run Code Online (Sandbox Code Playgroud)
谢谢,克雷格
我觉得你的事情有点乱。怎么样:
CREATE PROCEDURE dbo.usp_restore
@backup_path NVARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
RESTORE FILELISTONLY FROM DISK = @backup_path;
END
GO
Run Code Online (Sandbox Code Playgroud)
创建过程应该与任何单独的调用完全分开。所以在另一个窗口,或者两周后,你应该能够做到这一点(同样,完全独立于存储过程的创建):
DECLARE @bp NVARCHAR(MAX) = N'Z:\BACKUPS\my_database_backup.bak';
INSERT #filepaths EXEC dbo.usp_restore @backup_path = @bp;
Run Code Online (Sandbox Code Playgroud)
您应该查看其他一些评论:
如果您不希望存储过程对此有所帮助(为什么不呢?),请确保您可以以更混乱的方式执行此操作。假设您已经有一个 #temp 表,#t
使用正确的列和数据类型创建:
DECLARE @path NVARCHAR(MAX) = N'Z:\BACKUPS\my_database_backup.bak';
DECLARE @sql NVARCHAR(MAX) = N'RESTORE FILELISTONLY FROM DISK = @path;';
INSERT #t EXEC master.sys.sp_executesql @sql, N'@path NVARCHAR(MAX)', @path;
Run Code Online (Sandbox Code Playgroud)
但是,为什么不在需要时准备一个存储过程,而不是移植所有这些庞大的代码呢?