I'm missing something

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 an error: "wrong sysntax about +"

If I do not use variables, it works fine. What am I missing! thanks in advance

+3
source share
5 answers

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

declare @cmd varchar(500)
set @cmd = 'osql -E -S ' + @servername+ ' -d ' + @dbname +' -i ' + @Dir
exec master.dbo.xp_cmdshell @cmd
+3
source

You do not assign a value @servername

+2
source

, :

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
+2

exec ( , ).

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

you had a server name declared and used in different ways, and you are not allowed to have expressions as parameters of the stored procedure, so combine the command into a variable and then pass it to the stored procedure master.dbo.xp_cmdshell.

0
source

Source: https://habr.com/ru/post/1740137/


All Articles