0

とても複雑だと思います。私は一日中解決策を探していました。

私は SQL Server 2008 R2 を使用しており、現在いくつかのファイルをxp_cmdshell生成しています.csvC:\

私が今やりたいことは、それらをネットワーク内の Linux サーバーに直接生成することです。

私はこれを試しました:

EXEC xp_cmdshell 'NET USE T: \\192.168.0.25\PERSONS 123456 /user:linuxuser  /PERSISTENT:yes'
set @filepath = 'T:'

set @command ='echo '+@customerheader+' > '+@filepath+'\PERSONS\'+convert(varchar,123456)+'.csv'
set @command = replace(@command,'&','e')
exec master..xp_cmdshell @command

EXEC xp_cmdshell 'net use T: /delete'

そして、私が得るのは、「システムは指定されたパスを見つけることができません」です。
マップされたドライブが正常に作成されると、「コマンドは正常に完了しました。」と「T: は正常に削除されました。」

前もって感謝します

4

1 に答える 1

0

私はあなたが逃げる必要があると思います: xp_cmdshell

以下はどうですか?

NET USE T: \\192.168.0.25\PERSONS 123456 /user:linuxuser  /PERSISTENT:yes

SET SQLSERVER=YOUR_sql_SERVER
SET SQLQUERY=C:\LOCALFOLDER\somequery.sql
SET OUTPUTFILE=T:\somefolder\someoutput.csv
sqlcmd -S %SQLSERVER% -d YOUR_DATABASE -U SQL_USER -P SQLPASSWORD -i"%SQLQUERY%" -o "%OUTPUTFILE%" -s"," -y30

net use T: /delete

問題は、xp_cmdshell を呼び出すたびに、CMD.exe の別の PID を呼び出し、別のセッションまたはインスタンスであり、問​​題を引き起こしていることだと思います。

お役に立てれば!

于 2015-09-01T15:38:07.647 に答える