Как я могу экспортировать результат запроса в файл .csv в SQL Server 2008?
Как я могу экспортировать результат запроса в файл .csv в SQL Server 2008?
Ответы:
Вот полноэкранная версия этого изображения ниже
Это покажет результаты вашего запроса в виде текста, разделенного запятыми.
Чтобы сохранить результаты запроса в файл: Ctrl + Shift + F
Ctrl+Shift+F
, он меняет только режим вывода, это не влияет на результаты, если вы уже выполнили запрос. Чтобы это отразилось, вам необходимо повторно запустить запрос. Когда вы запустите его в режиме «Результаты в файл», он предложит вам указать, где вы хотите сохранить результаты.
Я знаю, что это немного устарело, но вот способ намного проще ...
Запустите свой запрос с настройками по умолчанию (результаты помещаются в формате сетки, если ваш запрос не в формате сетки, см. Ниже)
Щелкните правой кнопкой мыши результаты сетки, выберите «Сохранить результаты как» и сохраните их.
Если ваши результаты не в формате сетки, щелкните правой кнопкой мыши в том месте, где вы пишете запрос, наведите указатель мыши на «Результаты в» и нажмите «Результаты в сетку».
Имейте в виду, что вы НЕ записываете заголовки столбцов!
Удачи!
Вы можете использовать PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
и Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(но не нужно было подключать эти командлеты). Кроме того , я спас команду в сценарий, который не будет работать , пока я не изменил политику выполнения: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
будет достаточно политики исполнения.
Если рассматриваемая база данных является локальной, то, вероятно, наиболее надежный способ экспортировать результат запроса в файл CSV (то есть предоставить вам наибольший контроль) является, вероятно, следующим .
После тщательного изучения этого процесса я обнаружил, что следующее является лучшим вариантом
Сценарий PowerShell
$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"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Основываясь на ответе 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 command-let.
Используйте 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
Но есть несколько предостережений:
У вас должен быть доступен поставщик Microsoft.ACE.OLEDB.12.0. Провайдер Jet 4.0 тоже подойдет, но он старый, поэтому я использовал его.
Файл .CSV должен уже существовать. Если вы используете headers ( HDR=YES
), убедитесь, что первая строка файла .CSV представляет собой список всех полей с разделителями.
Использование собственной техники SQL Server Management Studio для экспорта в CSV (как предлагается @ 8kb) не работает, если ваши значения содержат запятые, потому что SSMS не заключает значения в двойные кавычки. Более надежный способ, который сработал для меня, - просто скопировать результаты (щелкните внутри сетки, а затем CTRL-A, CTRL-C) и вставьте их в Excel. Затем сохраните как файл CSV из Excel.
Вы можете использовать QueryToDoc ( http://www.querytodoc.com ). Он позволяет вам написать запрос к базе данных SQL и экспортировать результаты - после выбора разделителя - в Excel, Word, HTML или CSV.
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 Quoted верен.
Необходимо, чтобы 1> Файл уже присутствовал со столбцами 2> Необходимо установить Office
Ошибки, с которыми столкнулись
Msg 7303, уровень 16, состояние 1, строка 1 Не удается инициализировать объект источника данных поставщика OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)».
Msg 15281, уровень 16, состояние 1, строка 1 SQL Server заблокировал доступ к ЗАЯВЛЕНИЮ «OpenRowset / OpenDatasource» компонента «Специальные распределенные запросы», поскольку этот компонент отключен как часть конфигурации безопасности для этого сервера. Системный администратор может включить использование «Ad Hoc Distributed Queries» с помощью процедуры sp_configure. Для получения дополнительной информации о включении «Ad Hoc Distributed Queries» найдите «Ad Hoc Distributed Queries» в электронной документации по SQL Server.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Если вы не хотите использовать Powershell, этот ответ представляет собой вариант отличного ответа 8 КБ. Единственное отличие состоит в том, что вместо выбора CSV в качестве формата вывода выберите с разделителями табуляции. Таким образом, если в ваших данных есть запятые, ячейки в Excel не будут пропущены. Кроме того, если у вас установлен разделитель Excel по умолчанию на вкладки, вы можете просто скопировать все результаты запроса SSMS (CTRL-A, CTRL-C) и вставить в Excel (нет необходимости сохранять как файл и импортировать в Excel. ):
Теперь вы можете выполнить свой запрос, затем нажать CTRL-A, чтобы выбрать все результаты, затем CTRL-C, чтобы скопировать в буфер обмена, затем переключиться на Excel 2013 (может работать и в 2007 году, не уверен) и вставить - при условии, что Excel по умолчанию разделитель установлен на табуляцию.
Здесь стоит упомянуть еще один метод:
SQLCMD -S SEVERNAME -E -Q "SELECT COLUMN FROM TABLE" -s "," -o "c:\test.csv"
ПРИМЕЧАНИЕ: я не вижу, чтобы какой-либо сетевой администратор разрешил вам запускать сценарии PowerShell.
Надеюсь, 10 лет не слишком поздно, я использовал это в планировщике Windows;
"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE"
-S BLRREPSRVR\SQLEXPRESS -d Reporting_DB -o "C:\Reports\CHP_Gen.csv" -Q "EXEC dbo.CHP_Generation_Report" -W -w 999 -s ","
Он открывает команду sql .exe и запускает сценарий, разработанный для команды sql. Командный сценарий sql очень прост в использовании, выполнив несколько поисков в Google, проб и ошибок. Вы можете видеть, что он выбирает базу данных, определяет местоположение вывода и выполняет процедуру. Процедура - это просто запрос, выбирающий, какие строки и столбцы отображать из таблицы в базе данных.
Да, все это возможно, когда у вас есть прямой доступ к серверам. Но что, если у вас есть доступ к серверу только с веб-сервера / сервера приложений? Что ж, ситуация была такая у нас давно, и решением было экспорт SQL Server в CSV .