3
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

它给了我和错误:“+ 附近的 sysntax 不正确”

如果我不使用变量,它可以正常工作。我错过了什么!提前致谢

4

5 回答 5

3

参数列表中不允许添加。将它们移动到单独的行,例如:

declare @cmd varchar(500)
set @cmd = 'osql -E -S ' + @servername+ ' -d ' + @dbname +' -i ' + @Dir
exec master.dbo.xp_cmdshell @cmd
于 2010-04-07T11:28:13.563 回答
2

您没有为@servername

于 2010-04-07T11:27:23.090 回答
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
于 2010-04-07T11:28:16.887 回答
0

尝试将整个exec放在一条线上(我承认,这有点像在黑暗中刺伤)。

于 2010-04-07T11:26:15.423 回答
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 存储过程。

于 2010-04-07T11:35:30.487 回答