2017-01-10 2 views
0

Я пытаюсь экспортировать мои SQL результаты запроса, которые я хотел бы сделать это автоматически когда вы выполнить запрос. Я видел примеры использования вывода для, который я пытался использовать, но это дало бы мне синтаксическую ошибку, как в примерах Select * From dbo.anyTable Output to, но для меня, где у меня есть где и внутреннее соединение в моем запросе У меня есть ) a после этого, что я думаю, является проблемой. Я знаю, что можно сохранить его, щелкнув правой кнопкой мыши и сохранить результаты как, но это не то, что я хочу идеально, так как я хотел бы автоматизировать всю систему, которую я пытаюсь сделать.Как автоматически сохранять результаты запроса SQL в CSV-файл

Например, я хотел бы попробовать и сделать это с частью моего запроса:

Select top 1 a.NAME, COUNT(*) OVER() AS totalRows 
From (Select de.NAME From dbo.DEPLOYMENT_ENVIRONMENT as de 
Inner join dbo.DEPLOYMENT_RESULT as dr 
on dr.ENVIRONMENT_ID = de.ENVIRONMENT_ID 
Where @filecontent = de.ENVIRONMENT_ID) a 
OUTPUT TO @myPath 
FORMAT TEXT 
QUOTE '"' 
WITH COLUMN NAMES; 

EDIT Я следующий запрос, но он не создает файл или любую ошибку то, что это я делать не так?

Set @OutputFilePath = 'C:\DeploymentPipelines' 
Set @ExportSQL = 'EXEC master.dbo.xp_cmdshell ''bcp 
"Select top 1 a.NAME, COUNT(*) OVER() AS totalRows 
From (Select de.NAME From dbo.DEPLOYMENT_ENVIRONMENT as de 
Inner join dbo.DEPLOYMENT_RESULT as dr 
on dr.ENVIRONMENT_ID = de.ENVIRONMENT_ID 
Where @filecontent = de.ENVIRONMENT_ID) a" 
queryout "' + @OutputFilePath + '\results4.csv" -T -c -t -S DEV-BUILD01\SQLSERVER''' 
Exec(@ExportSQL) 
+0

Возможно, вам понадобится [SQL Job] (https://msdn.microsoft.com/en-us/library/ms190268.aspx). – Null

+0

Кроме того, возможно, будет возможно написать небольшой скрипт cmd, который выполняет ваш SQL-скрипт и записывает вывод в файл ... но я согласен: SQL Job может быть лучше. – Tyron78

+0

Что редактирует, делает ли этот оператор выбора фактически на своем собственном? выглядит как синтаксическая ошибка здесь с двойной запятой; @ a.NAME,, COUNT (*) –

ответ

2

У меня есть некоторые сохраненные проки, которые делают это для изменения .csv файлов, я обнаружил, что с помощью BCP была моим лучшим способом сделать это в TSQL сценарии. Синтаксис выглядит так (взято из одного из моих живых примеров,

DECLARE @OutputFilePath nvarchar(max); SET @OutputFilePath = 'C:\Users\VirtualMachine1\Desktop\MasterFullOutput\Phase03' 

DECLARE @ExportSQL nvarchar(max); SET @ExportSQL = N'EXEC master.dbo.xp_cmdshell ''bcp "SELECT TextData FROM DataConversionDB.dbo.DataScripts ORDER BY RowNumber" queryout "' + @OutputFilePath + '\OutputData.csv" -T -c -t -S WIN-SIITTJOB7OV''' 

EXEC(@ExportSQL) 

Вы должны убедиться, что ваш SQL Логин службы сервера имеет доступ к файлу, где вы выводящие к (не собственным разрешениям, разрешений службы NT SQL Server)

Вот некоторые дополнительные чтения по команде BCP;.

https://msdn.microsoft.com/en-GB/library/aa337544.aspx

https://www.simple-talk.com/sql/database-administration/working-with-the-bcp-command-line-utility/

Using bcp utility to export SQL queries to a text file

Чтобы сузить это, приведите этот пример и посмотрите, что произойдет;

DECLARE @ExportSQL nvarchar(max); 

SET @ExportSQL = 'EXEC ..xp_cmdshell ''bcp "SELECT TOP 1 FROM sys.objects " queryout "C:\DeploymentPipelines\results4.csv" -T -c -t -S DEV-BUILD01\SQLSERVER''' 

Exec(@ExportSQL) 
+0

Да, это кажется замечательным, но мне не нужно экспортировать какие-либо данные из таблицы, поэтому мне нужно включить @DataTableName –

+0

Конечно, у меня просто есть это там, потому что это было частью курсора, который импортировал файл для каждой таблицы внутри диапазон. Я обновлю ответ, чтобы удалить эту часть имени файла. Кроме того, «WIN-SIITTJOB7OV» - это мое имя SQL Server, вы хотите изменить его в соответствии с вашим. –

+0

ok cool спасибо, что добавили его atm до сих пор нет проблем –

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