2010-04-07 2 views
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 около +»я что-то

Если я не использовать переменные работает нормально. Что мне не хватает! Заранее спасибо

+2

Может ли это отсутствовать после имени сервера? – Bobby

+0

не очень спасибо – Redi

ответ

3

Дополнения не допускаются в списке параметров. Переместить их в отдельную строку, например:

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

спасибо, что это вещь! – Redi

0

Попробуйте поместить все exec на одной линии (это немного удар в темноте, признаюсь).

+0

Это моя вина ... Я сделал перерыв в строке, когда я перестроил код. –

2

Вы не присвоить значение @servername

+0

Прошу прощения, я написал это неправильно на этом посту! Объявляется как имя сервера – Redi

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

Спасибо, это было полезно – Redi

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 

вы указали имя сервера и использовали его по-разному, и вам не разрешено иметь выражения в качестве параметров хранимой процедуры, поэтому объедините команду в переменную и передайте ее мастеру. Хранимая процедура dbo.xp_cmdshell.

Смежные вопросы