2016-04-01 2 views
0

Ich muss die Tabellen in der DB exportieren, aber in separate Dateien. Statt den Export-Assistenten in SQL Server Management Studio für jede Tabelle auszuführen, gibt es dafür einen schnelleren Weg? Die Daten müssen in einer durch Trennzeichen getrennten Form vorliegen. Ich habe eine solution gefunden, aber es zieht nicht die Daten, nur die Tabellendefinitionen.Schnellerer Weg zum Export von SQL-Tabellen in separate durch Trennzeichen getrennte Dateien?

+0

Sie exportieren möchten alle Tabellen in CSV-Dateien? – SQLChao

+0

Nein, zu durch Trennzeichen getrennten Dateien, separat eine Datei pro Tabelle. –

+0

Sie könnten dies wahrscheinlich von Powershell tun – dfundako

Antwort

1

Hier ist eine Möglichkeit, es zu tun. Sie können 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 

Dann nutzen Sie die undokumentierte sp_msforeachtable und bcp ermöglichen begrenzt in eine Datei Rohr zu exportieren.

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

Dies funktioniert und Sie werden Sie sicherstellen möchten, deaktivieren xp_cmdshell, wenn es nicht bereits aktiviert, wie es genutzt werden kann (es gibt viel zu diesem Thema zu lesen). Stellen Sie außerdem sicher, dass Sie über die erforderlichen Berechtigungen verfügen, um die Dateien überall dorthin zu schreiben, wo sie benötigt werden. So entfernen Sie die Striche unter Spaltennamen in die Ausgabedateien

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 "|"''' 

:

+0

Das ist eine ausgezeichnete Lösung +1. – alas

+0

Vielen Dank! –

+0

@SQLChao, ich bin durch die Dokumentation bcp https://msdn.microsoft.com/en-us/library/ms162802.aspx, gibt es eine Parameteroption, Spaltennamen in die erste Zeile der Ausgabedateien einzuschließen? Vielen Dank. –

0

Sie können versuchen, mit bcp (siehe hier https://msdn.microsoft.com/en-us/library/ms162802.aspx), wo Sie das Exportformat angeben können, Pipe für das Trennzeichen zu verwenden. Der einzige Nachteil ist, dass Sie den Tabellennamen jedes Mal angeben müssen, so dass Sie wahrscheinlich eine Liste mit den Tabellennamen erstellen müssen und dann ein Powershell-Skript verwenden müssen, um die Liste zu durchlaufen und bcp auszuführen.

0

Ich fand auch die folgenden, die die sp_configure für xp_cmdshell gesetzt wurde als @SQLChao in seiner Lösung wies darauf hin, half, unter der Annahme,

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

, entfernen Sie die BAK-Dateien erstellt:

Execute master.dbo.xp_cmdshell 'del c:\temp\*.bak' 
Verwandte Themen