declare @servername varchar(2000)
set @EmriServerit=(select @@servername)
declare @dbname varchar(2000)
set @dbname ='Test1'
declare @Dir varchar(2000)
set @Dir='F:\dataclient.sql'
exec master.dbo.xp_cmdshell 'osql -E -S ' + @servername+ ' -d ' +
@dbname +' -i ' + @Dir
它给了我一个错误: “语法不正确+”
如果我不使用变量,它可以正常工作。 我错过了什么! 提前致谢
答案 0 :(得分:3)
参数列表中不允许添加。将它们移动到单独的行,例如:
declare @cmd varchar(500)
set @cmd = 'osql -E -S ' + @servername+ ' -d ' + @dbname +' -i ' + @Dir
exec master.dbo.xp_cmdshell @cmd
答案 1 :(得分:2)
您没有为@servername
答案 2 :(得分:2)
我会首先尝试将命令字符串连接在一起,然后在执行之前检查它:
declare @servername varchar(2000)
set @servername = select @@servername
declare @dbname varchar(2000)
set @dbname ='Test1'
declare @Dir varchar(2000)
set @Dir='F:\dataclient.sql'
declare @execCmd varchar(max)
set @execCmd = 'osql -E -S ' + @servername+ ' -d ' + @dbname +' -i ' + @Dir
print @execCmd -- what do you get as output here??
exec master.dbo.xp_cmdshell @execCmd
答案 3 :(得分:0)
尝试将整个exec
放在一条线上(我承认,这在黑暗中有点刺伤)。
答案 4 :(得分:0)
尝试:
declare @EmriServerit varchar(2000)
set @EmriServerit=(select @@servername)
declare @dbname varchar(2000)
set @dbname ='Test1'
declare @Dir varchar(2000)
set @Dir='F:\dataclient.sql'
declare @Command varchar(500)
set @command='osql -E -S ' + @EmriServerit+ ' -d ' +
@dbname +' -i ' + @Dir
exec master.dbo.xp_cmdshell @command
您声明并使用了不同的服务器名称,并且不允许将表达式作为存储过程的参数,因此将命令连接到变量中,然后将其传递给master.dbo.xp_cmdshell存储过程。 / p>