3 Stimmen

Ich übersehe etwas

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

Ich erhalte eine Fehlermeldung: "incorrect sysntax near +"

Wenn ich keine Variablen verwende, funktioniert es gut. Was übersehe ich? Vielen Dank im Voraus

3voto

Andomar Punkte 224164

Ergänzungen sind in einer Parameterliste nicht zulässig. Verschieben Sie sie in eine separate Zeile, z. B.:

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

2voto

Álvaro González Punkte 134708

Sie ordnen keinen Wert zu @servername

2voto

marc_s Punkte 701497

Ich würde versuchen, die Befehlszeichenfolge zuerst zu verketten und sie dann vor der Ausführung zu überprüfen:

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

0voto

Marcelo Cantos Punkte 173498

Versuchen Sie, die gesamte exec in einer Zeile (ich gebe zu, dass ich ein wenig im Dunkeln tappe).

0voto

KM. Punkte 98297

Versuchen:

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

Sie hatten den Servernamen anders deklariert und verwendet, und Sie dürfen keine Ausdrücke als Parameter für eine gespeicherte Prozedur haben, also verketten Sie den Befehl in eine Variable und übergeben Sie ihn dann an die gespeicherte Prozedur master.dbo.xp_cmdshell.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X