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」

変数を使用しない場合は問題なく動作します。何が足りないの!前もって感謝します

4

5 に答える 5

3

パラメータリストに追加することはできません。次のように、それらを別の行に移動します。

declare @cmd varchar(500)
set @cmd = 'osql -E -S ' + @servername+ ' -d ' + @dbname +' -i ' + @Dir
exec master.dbo.xp_cmdshell @cmd
于 2010-04-07T11:28:13.563 に答える
2

に値を割り当てない@servername

于 2010-04-07T11:27:23.090 に答える
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
于 2010-04-07T11:28:16.887 に答える
0

全体execを1行にまとめてみてください(これは暗闇の中でのちょっとした刺し傷です、私は告白します)。

于 2010-04-07T11:26:15.423 に答える
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

サーバー名の宣言と使用方法が異なり、ストアドプロシージャへのパラメータとして式を使用することは許可されていないため、コマンドを変数に連結してから、master.dbo.xp_cmdshellストアドプロシージャに渡します。

于 2010-04-07T11:35:30.487 に答える