我有一个存储过程,它将备份存储在同一个链接服务器上的链接服务器上的数据文件。从每个公司的表中检索链接的服务器名称。因此链接的服务器名称保存在变量中。 所以在我的存储过程中,我运行以下备份数据库命令:
SET @Sql='BACKUP DATABASE [' + @datafileID + '] TO DISK = ''' + @fullPath + ''' WITH INIT, COMPRESSION;'
EXEC (@Sql) AT [@ServerName]
@datafileID
是数据文件名
@fullPath
具有指向链接服务器上备份文件夹的路径
@ServerName
具有链接服务器名称
运行存储过程时,出现以下错误:
无法找到服务器' @ ServerName'在sys.servers中。验证 指定了正确的服务器名称。如有必要,执行存储 过程sp_addlinkedserver将服务器添加到sys.servers。
链接服务器是在代码
中创建的IF NOT EXISTS(SELECT * FROM sys.servers where name = @ServerName )
SET @Sql = 'sp_addlinkedserver @server = '' ' + @ServerName + ''''
EXECUTE( @SQL)
如何在“备份数据库”命令中将服务器名称作为变量传递。
答案 0 :(得分:0)
将该@Sql
变量与另一个存储Exec AT
的变量进行复合,如下所示:
declare @ServerName varchar(20), @Sql varchar(max),@datafileID varchar(100),@FullPath varchar(150),
@cmd varchar(max)
set @ServerName = 'YourLinkedServerName'
set @datafileID = 'YourDatabaseName'
set @FullPath = 'YourFullPath\Backups.bak'
SET @Sql='''BACKUP DATABASE [' + @datafileID + '] TO DISK = ''''' + @fullPath + ''''' With INIT, COMPRESSION;'''
set @cmd = 'EXEC (' + @Sql + ') AT [' + @ServerName + ']'
--print @cmd
-- will display:
-- EXEC ('BACKUP DATABASE [YourDatabaseName] TO DISK = ''YourFullPath\Backups.bak'' With INIT, COMPRESSION') AT [YourLinkedServerName]
exec (@cmd)