2016-04-01 19 views
0

Tabloları DB'ye, ancak ayrı dosyalara vermem gerekecek. Her bir tablo için SQL Server Management Studio'da Dışa Aktar sihirbazını çalıştırmak yerine, bunu başarmanın daha hızlı bir yolu var mı? Verilerin boruyla sınırlandırılmış biçimde olması gerekecektir. Bir solution buldum, ancak verileri değil, tablo tanımlarını çekiyor.SQL tablolarını ayrı bir boruyla ayrılmış dosyalara aktarmanın daha hızlı yolu?

+0

dışa istiyorum tüm tablolar CSV dosyalarına? – SQLChao

+0

Hayır, boruyla ayrılmış dosyalara, her tablo için ayrı bir dosya. –

+0

Muhtemelen bunu Powershell – dfundako

cevap

1

İşte bunu yapmanın bir yolu. Sen Xp_cmdshell

-- To allow advanced options to be changed. 
EXEC sp_configure 'show advanced options', 1; 
GO 
-- To update the currently configured value for advanced options. 
RECONFIGURE; 
GO 
-- To enable the feature. 
EXEC sp_configure 'xp_cmdshell', 1; 
GO 
-- To update the currently configured value for this feature. 
RECONFIGURE; 
GO 

Sonra ayrılmış bir dosya borusuna ihracat belgesiz sp_msforeachtable ve Kullanımıbcp etkinleştirebilirsiniz.

EXECUTE sp_msForEachTable 
    'EXECUTE master.dbo.xp_cmdshell ''bcp "SELECT * FROM ?" queryout D:\Data\?.txt -t "|" -c -T -S ServerName\InstanceName''' 

Bu çalışır ve emin bunu istismar edilebilir olarak zaten etkinleştirmek olmasaydı Xp_cmdshell devre dışı olmak istersiniz (okumak için bol bu hayat var). Ayrıca, dosyaları nereye gitmeleri gerekiyorsa yazmanız için gerekli izinlere sahip olduğunuzdan emin olun.

Execute sp_MSforeachtable 
    'Execute master.dbo.xp_cmdshell ''sqlcmd -S DATABASE -E -d mydb -q "SET NOCOUNT ON SELECT * FROM ?" -W -o C:\TEMP\?.bak -s "|"''' 

çıktı dosyalarında sütun adları altında tire kaldırmak için:

+0

Bu mükemmel bir çözümdür +1. – alas

+0

Teşekkürler bir demet! –

+0

@SQLChao, bcp belgelerine bakıyorum https://msdn.microsoft.com/en-us/library/ms162802.aspx, çıktı dosyalarının ilk satırında sütun isimlerini içerecek bir parametre var mı? Teşekkürler. –

0

Sınırlayıcı için boru kullanmak üzere dışa aktarma formatını belirtebileceğiniz bcp'yi (burada https://msdn.microsoft.com/en-us/library/ms162802.aspx'a bakın) kullanmayı deneyebilirsiniz. Tek dezavantaj, her seferinde tablo ismini belirlemeniz gerekecek, bu yüzden muhtemelen tablo isimlerini içeren bir liste oluşturmanız ve daha sonra listeye dönüp bcp'yi çalıştırmak için bir powershell betiğini kullanmanız gerekecektir.

0

Ben de @SQLChao onun çözeltide belirttiği gibi Sp_configure xp_cmdshell için ayarlandı varsayarak yardımcı aşağıdakileri bulundu

Execute sp_MSforeachtable 
    'Execute master.dbo.xp_cmdshell ''findstr /R /C:"^[^-]*$" c:\temp\?.bak > c:\temp\?.txt''' 

Son olarak kaldırmak .bak dosyaları oluşturuldu:

Execute master.dbo.xp_cmdshell 'del c:\temp\*.bak' 
İlgili konular