2010-04-07 179 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

它可能是servername後的空缺嗎? – Bobby 2010-04-07 11:26:14

+0

不是真的非常感謝 – Redi 2010-04-07 11:31:00

回答

3

附加的參數列表是不允許的。它們移到一個單獨的行,如:

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

謝謝這是事情! – Redi 2010-04-07 11:38:28

0

嘗試把整個exec在一行(這是一個黑暗中刺,我承認)。

+0

這是我的錯......當我改造代碼時,我做了一個換行符。 – 2010-04-07 11:29:08

2

你不分配一個值@servername

+0

對不起,我在帖子上寫錯了! 這是聲明作爲服務器名稱 – Redi 2010-04-07 11:30:18

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 2010-04-07 11:38:51

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存儲過程。

相關問題