2015-09-01 4 views
0

Так что я вроде как сложный, я думаю, я искал весь день для решения.Как создать CSV-файл из SQL с помощью xp_cmdshell в общей папке linux с samba?

У меня есть SQL Server 2008 R2 и xp_cmdshell я в настоящее время произвести некоторые .csv файлы в C:\

То, что я хочу сделать сейчас, генерировать их непосредственно на сервер Linux в сети.

Я попытался это:

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

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

EXEC xp_cmdshell 'net use T: /delete' 

И что я получаю: «Система не может найти указанный путь.»
Пока сопоставленный диск создан успешно: «Команда успешно выполнена». и «T: удалено успешно».

Спасибо заранее

+0

Вне SQL Server/при использовании SQLCMD или OSQL. Можете ли вы просто использовать команды 'NET USE' и' Dir C: somefolder \ *. *> T: \ somefile.txt' – Leptonator

+0

ye он работает, он создан файл – Elgert

+0

Можете ли вы показать нам весь код SQL? Я не думаю, что вы показываете нам все. Понимайте NDA и т. Д. Но вам нужно показать нам, как вы вызываете свой SQL-запрос. – Leptonator

ответ

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, вы вызываете отдельный PID для CMD.exe и другой сеанс или экземпляр и причиняет вам неприятности.

Надеюсь, это поможет!