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

It gives me and error: "incorrect sysntax near +"

If i don't use variables it works ok. What am i missing! Thanks in advance

Anders Abel
  • 67,989
  • 17
  • 150
  • 217
Redi
  • 163
  • 1
  • 10

5 Answers5

3

Additions are not allowed in a parameter list. Move them to a separate line, like:

declare @cmd varchar(500)
set @cmd = 'osql -E -S ' + @servername+ ' -d ' + @dbname +' -i ' + @Dir
exec master.dbo.xp_cmdshell @cmd
Andomar
  • 232,371
  • 49
  • 380
  • 404
2

You don't assign a value to @servername

Álvaro González
  • 142,137
  • 41
  • 261
  • 360
2

I would try to concatenate together your command string first, and then check it before executing:

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
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
0

Try putting the entire exec on one line (this is a bit of a stab in the dark, I confess).

Marcelo Cantos
  • 181,030
  • 38
  • 327
  • 365
0

try :

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

you had the server name declared and used differently, and you are not permitted to have expressions as parameters to a stored procedure, so concatenate the command into a variable and then pass it to the master.dbo.xp_cmdshell stored procedure.

KM.
  • 101,727
  • 34
  • 178
  • 212