2010-07-02 5 views
110

Как экспортировать результат запроса в CSV-файл в SQL Server 2008?Экспорт результатов запроса в CSV-файл в SQL Server 2008

+0

возможно дубликат [Как экспортировать данные в формате CSV с SQL Server с помощью SQLCMD?] (Http://stackoverflow.com/questions/425379/how-to-export-data-as-csv -format-from-sql-server-using-sqlcmd) –

+0

Вам нужно, чтобы ваш разделитель экранировался? Большинство ответов до сих пор предполагают, что вы этого не делаете, что на самом деле не все, что CSV. – Nick

+0

@Nick - обычно разделители содержатся только с строкой, и они обычно имеют кавычки вокруг них. См. Мой ответ, чтобы увидеть решение этого. http://stackoverflow.com/questions/6115054/how-to-get-export-output-in-real-csv-format-in-sql-server-managment-studio/32660037#32660037 – MacGyver

ответ

142
  1. Open Management SQL Server Studio
  2. Перейти в раздел Инструменты> Параметры> Запрос Результаты> SQL Server> Результаты к тексту
  3. На крайнем правом, есть падение вниз коробка называется Output Format
  4. Выберите Запятая разделителями и нажмите кнопку OK

Here's a full screen version of that image, below

enter image description here

Это покажет ваши результаты запроса как текст с разделителями-запятыми.

Чтобы сохранить результаты запроса в файл: Ctrl + Shift + F

+0

Я не мог найти, где его сохраняет результат, можете ли вы дать мне подсказку, где искать? – Andrey

+6

Ответ немного вводит в заблуждение ... Когда вы нажимаете 'Ctrl + Shift + F', он меняет только режим вывода, это не влияет на результаты, если вы уже выполнили запрос. Чтобы это отразилось, вам нужно повторно запустить запрос. Когда вы запустите его в режиме «Результаты в файл», он должен запросить, где вы хотите сохранить результаты. – qJake

+2

Должно быть в меню «Инструменты»> «Параметры»> «Результаты запроса»> «SQL Server»> «Результаты для текста» – congusbongus

2

Вы можете использовать QueryToDoc (http://www.querytodoc.com). Он позволяет вам писать запрос к базе данных SQL и экспортировать результаты - после выбора разделителя - в Excel, Word, HTML или CSV

113

Я знаю, что это немного устарело, но здесь намного проще. ..

  1. Выполнить запрос с параметрами по умолчанию (кладет результаты в табличном формате, если ваш не находится в табличном формате, смотри ниже)

  2. правой кнопкой мыши по результатам сетки и нажмите кнопку «Сохранить результаты, как» и сохранить его.

Если результаты не в виде сетки, щелкните правой кнопкой мыши, где вы пишете запрос, парить «Результаты To» и нажмите кнопку «Результаты по сетке»

удачи!

+0

Решила мою проблему! – whileone

+1

Проблема только в том, что этот метод не позволяет вам устанавливать какие-либо параметры. Например, все NULL отображаются в выходных файлах как «NULL» и т. Д. Возможно, есть способ установить это, о котором я не знаю. – Noah

+1

@Noah Путь вокруг нулей, который я использую, для любых столбцов, которые, как вы знаете, будут пустыми, вы можете использовать 'ISNULL (NullableColumn, '') AS NullableColumn' Кажется, это работает лучше всего для меня. –

34

Вы можете использовать PowerShell

$AttachmentPath = "CV File location" 
$QueryFmt= "Query" 

Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath 
+0

Спасибо! Это было единственное предложение, которое сработало для меня. Ручки ускользают правильно – emertechie

+3

+10 если можно. Ответьте только на то, что справляется с побегом. Чтобы запустить это, мне пришлось добавить две строки в верхней части скрипта: 'Add-PSSnapin SqlServerCmdletSnapin100' и' Add-PSSnapin SqlServerProviderSnapin100'. –

+0

, если вы сталкиваетесь с таймаутом, добавьте ** querytimeout ** так, например. 'Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $ QueryFmt -querytimeout 600 | Export-CSV $ AttachmentPath' – Tilo

5

Опираясь на ответ NS, я есть сценарий PowerShell, который экспортирует в CSV файл с кавычками вокруг поля и запятую, и он пропускает информацию заголовка в файл.

add-pssnapin sqlserverprovidersnapin100 
add-pssnapin sqlservercmdletsnapin100 

$qry = @" 
Select 
    * 
From 
tablename 
"@ 

Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv" 

Первые две строки позволяют возможность использовать Invoke-Sqlcmd команду ЛПЭ.

3

Использование встроенной технологии SQL Server Management Studio для экспорта в CSV (как предложено @ 8kb) не работает, если ваши значения содержат запятые, потому что SSMS не переносит значения в двойные кавычки. Более надежный способ, который работал для меня, - просто скопировать результаты (щелкнуть внутри сетки, а затем CTRL-A, CTRL-C) и вставить ее в Excel. Затем сохраните CSV-файл из Excel.

6

T-SQL Использование:

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]') 
SELECT Field1, Field2, Field3 FROM DatabaseName 

Но, есть несколько предостережений:

  1. Вы должны иметь поставщика Microsoft.ACE.OLEDB.12.0 доступны. Поставщик Jet 4.0 тоже будет работать, но он древний, поэтому я использовал этот вариант.

  2. Файл .CSV должен будет уже существовать. Если вы используете заголовки (HDR=YES), убедитесь, что первая строка файла .CSV представляет собой список с разделителями всех полей.

0

Да, все это возможно, если у вас есть прямой доступ к серверам. Но что, если у вас есть только доступ к серверу с сервера веб-приложений? Ну, ситуация была у нас с длинной спиной, и решение было SQL Server Export to CSV.

1
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]') 
SELECT Field1, Field2, Field3 FROM DatabaseName 

как @Slogmeister Extraordinaire Правильно цитируется цитата.

Нужно иметь 1> Файл уже присутствует с колоннами 2> Нужно иметь офис установлен

Ошибки столкнулись

Msg 7303, уровень 16, состояние 1, строка 1 Невозможно инициализировать объект источника данных поставщика OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)». »

64 бит http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe

32 бит http://download.microsoft.com/download/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exe

Msg 15281, уровень 16, состояние 1, строка 1 SQL Server заблокировали доступ к ЗАЯВЛЕНИЕ 'OpenRowset/OPENDATASOURCE' из компонент 'Ad Hoc Distributed Queries', потому что этот компонент отключается как часть конфигурации безопасности для этого сервера. Системный администратор может включить использование «распределенных запросов» с помощью sp_configure. Для получения дополнительной информации о включении «Специальные распределенные запросы» найдите «Специальные распределенные запросы» в электронной документации по SQL Server.

EXEC sp_configure 'show advanced options', 1 
RECONFIGURE 
GO 
EXEC sp_configure 'ad hoc distributed queries', 0 
RECONFIGURE 
GO 
10

Если база данных в вопросе является локальной, следующим, вероятно, самым надежным способом экспортировать результат запроса к CSV файлу (то есть, что дает вам больший контроль).

  1. Скопируйте запрос.
  2. В обозревателе объектов щелкните правой кнопкой мыши соответствующую базу данных.
  3. Выберите «Задачи» >> «Экспорт данных ...»
  4. Настройте источник данных и нажмите «Далее».
  5. Выберите «Плоский файл» или «Microsoft Excel» в качестве адресата.
  6. Укажите путь к файлу.
  7. Если вы работаете с плоским файлом, настройте его по желанию. При работе с Microsoft Excel, выберите «Excel 2007» (предыдущие версии имеют лимит строки в 64k)
  8. Выберите «Создать запрос для указания данных для передачи»
  9. Paste запроса с шага 1.
  10. нажмите кнопку Далее >> просмотреть сопоставления >> нажмите далее >> выберите «запустить сразу» >> нажмите «закончить» дважды.

После прохождения этого процесса исчерпывающе, я нашел следующее быть лучшим вариантом

PowerShell Script

$dbname = "**YOUR_DB_NAME_WITHOUT_STARS**" 
$AttachmentPath = "c:\\export.csv" 
$QueryFmt= @" 
**YOUR_QUERY_WITHOUT_STARS** 
"@ 

Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation 

Запуск PowerShell как администратор

& "c:\path_to_your_ps1_file.ps1" 
+1

, если вы столкнулись с таймаутом, добавьте ** querytimeout ** так, например. 'Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $ QueryFmt -querytimeout 600 | Экспорт-CSV $ AttachmentPath' – Tilo

4

MS Excel -> Data -> Новый запрос -> Из базы данных ..follow шаги

0

Если вы не хотите использовать Powershell, этот ответ является вариацией на большой ответ 8kB в. Единственное различие заключается в том, что вместо выбора CSV в качестве выходного формата выберите «Разграничить табуляцию». Таким образом, если в ваших данных есть запятые, они не будут пропускать ячейки в Excel. Кроме того, если у вас установлен разделитель Excel по умолчанию для вкладок, вы можете просто сделать копию всех результатов запроса SSMS (CTRL-A, CTRL-C) и вставить в Excel (нет необходимости сохранять в виде файла и импортировать в Excel):

  • в SSMS Перейти Сервис> параметры> Результаты запроса> SQL Server> Результаты To Text
  • формат вывода Изменить на крайний справа на Tab разделителями
  • Нажмите OK

Теперь вы можете выполнить свой запрос, затем сделать CTRL-A, чтобы выбрать все результаты, затем CTRL-C, чтобы скопировать в буфер обмена, а затем переключиться на Excel 2013 (может работать и в 2007 году, не уверен) и вставить - если для разделителя по умолчанию Excel задано значение tab.

Image of SSMS Query Options Screen