Експортуйте результат запиту у файл .csv у SQL Server 2008


141

Як я можу експортувати результат запиту у файл .csv у SQL Server 2008?



Вам потрібно, щоб ваш роздільник вирвався? Більшість відповідей поки що припускають, що ви цього не зробите, що насправді не все, що CSV.
Нік

@ Nick - загальнорозмежувачі містять лише рядок, і вони зазвичай мають лапки навколо них. Дивіться мою відповідь, щоб побачити рішення цього. stackoverflow.com/questions/6115054/…
MacGyver


Я інколи використовую Python
LV98,

Відповіді:


168
  1. Відкрийте студію управління SQL Server
  2. Перейдіть до Інструменти> Параметри> Результати запитів> SQL Server> Результати тексту
  3. У правій крайній частині знаходиться випадаюче вікно під назвою Формат виводу
  4. Виберіть Розділену кому та натисніть кнопку ОК

Ось повна версія цього зображення нижче

введіть тут опис зображення

Це покаже результати ваших запитів у тексті з обмеженими комами.

Щоб зберегти результати запиту у файл: Ctrl + Shift + F


10
Відповідь трохи оманлива ... Коли ви натискаєте Ctrl+Shift+F, вона змінює лише вихідний режим, це не впливає на результати, якщо ви вже виконали запит. Для того, щоб це відобразилося, вам потрібно повторно виконати запит. Коли ви запускаєте його в режимі "Результати до файлу", він повинен підказувати, де ви хочете зберегти результати.
qJake

3
Потрібно перейти до Інструменти> Опції> Результати запитів> SQL Server > Результати тексту
congusbongus

45
Повторне виконання запиту мені було недостатньо. Мені довелося закрити вікно запиту, відкрити нове і знову запустити запит.
Breandán

3
Підтверджений @ Breandán коментар. Нові налаштування не застосовуватимуться до відкритого вікна запиту, вони повинні закрити їх та повторно запустити запит.
Shinigamae

3
Одне, що мені довелося зробити, це експортувати його як розширення RPT за замовчуванням. Після цього ви можете просто перейменувати його в CSV, і він працює.
Томас Беннетт

140

Я знаю, це трохи старе, але ось набагато простіший спосіб ...

  1. Запустіть свій запит із налаштуваннями за замовчуванням (розміщує результати у форматі сітки, якщо ваш не у форматі сітки, див. Нижче)

  2. Клацніть правою кнопкою миші на результатах сітки та натисніть «Зберегти результати як» та збережіть її.

Якщо ваші результати не у форматі сітки, клацніть правою кнопкою миші, де ви пишете запит, наведіть курсор "Результати до" та натисніть "Результати на сітку"

Зауважте, що НЕ захоплюєте заголовки стовпців!

Щасти!


1
Проблема полягає лише в тому, що цей метод, здається, не дозволяє вам встановлювати жодні параметри. Наприклад, усі NULL у вихідних файлах відображаються як "NULL" тощо. Можливо, є спосіб встановити це, про що я не знаю.
Ной

13
Дивовижно навіть у SSMS 2012, це не належним чином цитує текст для CSV. Кома або новий рядок у межах CHAR / VARCHAR повинні бути котировані, але це не так. Це призводить до переміщення даних у нові стовпці або у новий рядок.
Ерік Дж.

4
Також не дає заголовків стовпців.
Дон

8
@Don це дає заголовки стовпців, якщо ви перейдете в "Запит" -> "Параметри запиту ...", вкладку сітки та встановіть прапорець "включити заголовки стовпців при копіюванні або збереженні результатів"
Rob Wise

7
Це має бути відповіддю.
pspahn

46

Ви можете використовувати PowerShell

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

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

Дякую! Це була єдина пропозиція, яка працювала на мене. Ручки втеча належним чином
emertechie

3
+10, якби міг. Відповідь лише, що ручки втекли. Щоб запустити це, мені довелося додати два рядки у верхній частині сценарію: Add-PSSnapin SqlServerCmdletSnapin100і Add-PSSnapin SqlServerProviderSnapin100.
Ерік Дж.

якщо ви стикаєтеся з тайм - аут додати QueryTimeout так , наприкладInvoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Тіло

1
Як новачок у Powershell, мені потрібно було встановити модуль SqlServer: Install-Module -Name SqlServer(але мені не потрібно було хапатися за ці Cmdlets). Крім того , я врятував команду в сценарій, який не працюватиме , поки я не змінив політику виконання: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser.
піщаний

@sandyscott Я також новачок в Повершелі, тож дякую. У будь-якому випадку я думаю, що в цьому випадку RemoteSignedполітики виконання покарання буде достатньо.
BigBother

14

Якщо база даних, про яку йдеться, локальна, наступний, мабуть, є найбільш надійним способом експорту результату запиту у файл CSV (тобто дає вам найбільше контролю).

  1. Скопіюйте запит.
  2. Клацніть правою кнопкою миші в Object Explorer відповідну базу даних.
  3. Виберіть "Завдання" >> "Експорт даних ..."
  4. Налаштуйте джерело даних та натисніть «Далі».
  5. Виберіть "Плоский файл" або "Microsoft Excel" в якості місця призначення.
  6. Вкажіть шлях до файлу.
  7. Якщо ви працюєте з плоским файлом, налаштуйте за бажанням. Якщо ви працюєте з Microsoft Excel, виберіть "Excel 2007" (попередні версії мають обмеження рядка 64k)
  8. Виберіть "Написати запит, щоб вказати дані для передачі"
  9. Вставте запит із кроку 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 | Export-CSV $AttachmentPath
Тіло

6

MS Excel -> Дані -> Новий запит -> З бази даних .. далі виконайте кроки


6

Спираючись на відповідь 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 .


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-файлу - це розділений список усіх полів.


3

Використання вбудованої методики SQL Server Management Studio для експорту до CSV (як @ 8kb пропонується) не працює, якщо ваші значення містять коми, тому що SSMS не переносить значення в подвійні лапки. Більш надійний спосіб, який працював для мене, - просто скопіювати результати (натисніть всередину сітки, а потім CTRL-A, CTRL-C) і вставити їх у Excel. Потім збережіть як файл CSV з Excel.


2

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


2
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> Потрібно встановити Office

Виникла помилка

1

Повідомлення 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

2

Повідомлення 15281, Рівень 16, Стан 1, Рядок 1 SQL Server заблокував доступ до ПОЯСНЕННЯ "OpenRowset / OpenDatasource" компонента "Спеціальні розподілені запити", оскільки цей компонент вимкнено як частина конфігурації безпеки для цього сервера. Системний адміністратор може дозволити використовувати "Спеціальні розподілені запити" за допомогою sp_configure. Для отримання додаткової інформації про ввімкнення "Спеціальних розподілених запитів" знайдіть "Спеціальні розподілені запити" в Книгах SQL Server Online.

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

2

Якщо ви не хочете використовувати Powershell, ця відповідь є варіантом великої відповіді 8kb. Єдина відмінність полягає в тому, що замість вибору CSV як вихідного формату, виберіть Tab Delimited. Таким чином, якщо у ваших даних є коми, вони не пропускають комірки в Excel. Крім того, якщо у розділі Excel встановлено роздільник за замовчуванням на вкладки, ви можете просто скопіювати всі результати запитів SSMS (CTRL-A, CTRL-C) та вставити в Excel (не потрібно зберігати як файл та імпортувати в Excel ):

  • У SSMS перейдіть до Інструменти> Параметри> Результати запитів> SQL Server> Результати тексту
  • Змініть формат виводу в крайній правій частині на Tab Delimited
  • Натисніть кнопку ОК

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

Зображення екрана параметрів запитів SSMS


-1

Так, все це можливо, коли у вас є прямий доступ до серверів. Але що робити, якщо у вас є доступ лише до сервера з веб-сервера / додатків? Що ж, у нас така ситуація була довгою назад, і рішенням було експорт SQL Server у CSV .


Посилання ... Доступ заборонено?
хоггар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.