Bir sorgu sonucunu SQL Server 2008'de bir .csv dosyasına nasıl verebilirim?
Bir sorgu sonucunu SQL Server 2008'de bir .csv dosyasına nasıl verebilirim?
Yanıtlar:
Aşağıda, bu görüntünün tam ekran sürümü
Bu, sorgu sonuçlarınızı virgülle ayrılmış metin olarak gösterir.
Sorgunun sonuçlarını bir dosyaya kaydetmek için: Ctrl + Shift + F
Ctrl+Shift+F
, yalnızca çıkış modunu değiştirir, sorguyu zaten çalıştırdıysanız sonuçları etkilemez. Bunun yansıtılması için sorguyu yeniden çalıştırmanız gerekir. "Sonuçlar Dosyaya" modunda çalıştırdığınızda, sonuçları nereye kaydetmek istediğinizi sorar.
Bunun biraz eski olduğunu biliyorum, ama burada çok daha kolay bir yol var ...
Sorgunuzu varsayılan ayarlarla çalıştırın (sonuçları ızgara biçiminde değilse, ızgara biçiminde koyar, aşağıya bakın)
Izgara sonuçlarını sağ tıklayın ve "Sonuçları Farklı Kaydet" i tıklayın ve kaydedin.
Sonuçlarınız ızgara biçiminde değilse, sorguyu yazdığınız yeri sağ tıklayın, "Sonuçlar Kime" nin üzerine gelin ve "Izgaraya Sonuçlar" ı tıklayın
Sütun başlıklarını yakalamadığınızı unutmayın!
İyi şanslar!
PowerShell'i kullanabilirsiniz
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
ve Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(fakat bu Cmdlet'leri takmak zorunda kalmadım). Ayrıca, ben yürütme politikasını değiştirdi etmişti kadar aday olmayacağını bir komut dosyası komutları, kurtaran: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
yürütme politikasının yeterli olacağını düşünüyorum .
Söz konusu veritabanı yerelse, bir sorgu sonucunu bir CSV dosyasına (yani size en fazla denetimi sağlayan) dışa aktarmanın en sağlam yolu muhtemelen aşağıdadır .
Bu süreci ayrıntılı bir şekilde inceledikten sonra, aşağıdakilerin en iyi seçenek olduğunu gördüm
PowerShell Komut Dosyası
$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'i Yönetici olarak çalıştır
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
NS cevabına dayanarak , alan ve virgül ayrılmış tırnak işaretleri ile bir CSV dosyasına ihracat bir PowerShell betiği var ve dosyadaki başlık bilgilerini atlar.
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"
İlk iki satır Invoke-SqlCmd komut-let komutunu kullanma olanağını sağlar .
T-SQL kullanın :
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
Ancak, birkaç uyarı var:
Microsoft.ACE.OLEDB.12.0 sağlayıcısının kullanılabilir olması gerekir. Jet 4.0 sağlayıcısı da çalışacak, ancak eski, bu yüzden bunu kullandım.
.CSV dosyasının zaten mevcut olması gerekir. Headers ( HDR=YES
) kullanıyorsanız , .CSV dosyasının ilk satırının tüm alanların ayrılmış bir listesi olduğundan emin olun.
SSMS değerleri çift tırnak işaretleri arasına almadığından, değerleriniz virgül içeriyorsa CSV'ye dışa aktarmak için yerel SQL Server Management Studio tekniğini kullanmak (@ 8kb önerilir) çalışmaz. Benim için çalışan daha sağlam bir yol, sonuçları kopyalamak (ızgarayı tıklatıp ardından CTRL-A, CTRL-C) ve Excel'e yapıştırmaktır. Ardından Excel'den CSV dosyası olarak kaydedin.
QueryToDoc'u kullanabilirsiniz ( http://www.querytodoc.com ). SQL veritabanına bir sorgu yazmanıza ve sonuçları (sınırlayıcıyı seçtikten sonra) Excel, Word, HTML veya CSV'ye dışa aktarmanıza olanak tanır
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 Alıntı olarak doğru.
1> Dosya zaten sütun 2 ile mevcut olması gerekir> Bir Office yüklü olması gerekir
Karşılaşılan hatalar
Msg 7303, Seviye 16, Durum 1, Satır 1 OLE DB sağlayıcısının "Microsoft.ACE.OLEDB.12.0" veri kaynağı nesnesi bağlı sunucu "(null)" için başlatılamıyor. "
Msg 15281, Düzey 16, Durum 1, Satır 1 SQL Server, 'Ad Hoc Dağıtılmış Sorgular' bileşeninin STATEMENT 'OpenRowset / OpenDatasource' erişimini engelledi, çünkü bu bileşen bu sunucunun güvenlik yapılandırmasının bir parçası olarak kapatıldı. Bir sistem yöneticisi sp_configure kullanarak 'Ad Hoc Dağıtılmış Sorgular' kullanımını etkinleştirebilir. 'Ad Hoc Dağıtılmış Sorguları' özelliğini etkinleştirme hakkında daha fazla bilgi için SQL Server Books Online'da 'Ad Hoc Dağıtılmış Sorguları' için arama yapın.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Powershell'i kullanmak istemiyorsanız, bu cevap 8kb'nin harika cevabının bir çeşididir. Tek fark çıktı formatı olarak CSV'yi seçmek yerine Sekmeyle Sınırlandırılmış'ı seçmektir. Bu şekilde verilerinizde virgül varsa, Excel'deki hücreleri atlamaz. Ayrıca, Excel'in varsayılan sınırlayıcısını sekmelere ayarladıysanız, SSMS sorgu sonuçlarının tümünü (CTRL-A, CTRL-C) bir kopyasını yapabilir ve Excel'e yapıştırabilirsiniz (dosya olarak kaydetmenize ve Excel'e aktarmanıza gerek yoktur) ):
Şimdi sorgunuzu yürütebilir, ardından tüm sonuçları seçmek için CTRL-A, ardından panoya kopyalamak için CTRL-C yapın, sonra Excel 2013'e geçin (2007'de de çalışabilir, emin değilim) ve yapıştırın - Excel'in varsayılanını varsayarak sınırlayıcı sekmeye ayarlanmıştır.
Evet, tüm bunlar sunuculara doğrudan erişiminiz olduğunda mümkündür. Ancak sunucuya yalnızca bir web / uygulama sunucusundan erişiminiz varsa ne olur? Peki, bu durum uzun zamandır bizimle birlikte ve çözüm CSV'ye SQL Server Export oldu .