我有一个存储过程,它将备份存储在同一链接服务器上的链接服务器上的数据文件。从每个公司的表中检索链接的服务器名称。因此,链接的服务器名保存在一个变量中。因此,在我的存储过程中,我运行以下备份数据库命令:
SET @Sql='BACKUP DATABASE [' + @datafileID + '] TO DISK = ''' + @fullPath + ''' WITH INIT, COMPRESSION;'
EXEC (@Sql) AT [@ServerName]@datafileID是数据文件名。
@fullPath具有链接服务器上备份文件夹的路径。
@ServerName具有链接服务器名。
当运行存储过程时,我得到以下错误:
无法在sys.servers中找到服务器“@ServerName”。验证是否指定了正确的服务器名称。如果有必要,执行存储过程sp_addlinkedserver将服务器添加到sys.servers。
链接服务器是在代码前面创建的。
IF NOT EXISTS(SELECT * FROM sys.servers where name = @ServerName )
SET @Sql = 'sp_addlinkedserver @server = '' ' + @ServerName + ''''
EXECUTE( @SQL)如何将服务器名作为备份数据库命令中的变量传递。
发布于 2020-02-27 08:25:33
将该@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)https://stackoverflow.com/questions/31010786
复制相似问题