2017-01-05 6 views
0

Ich versuche, einige Daten aus einer meiner SQL Server-Datenbank zu exportieren. Es hat ein wenig mehr als 300 Tabellen und ich habe keine Möglichkeit gesehen, diese Daten mit dem SSMS-Assistenten zu exportieren, da es immer nur eine Tabelle gleichzeitig tut. Ich brauche das Trennzeichen "/". Also habe ich mit xp_cmdshell herumgespielt und es scheint fast alles zu tun, was ich tun muss, außer einer Sache.Mit xp_cmdshell exportieren Sie alle Tabellen in separate TXT-Dateien

Ich muss es der Tabellenname wie dies gerade ausgegeben. Table1.txt wo jetzt gibt sie als [dbo] [table1] .txt

Execute sp_MSforeachtable 'Execute master.dbo.xp_cmdshell ''sqlcmd -S SERVER\INSTANCE -E -d DB -q "SET NOCOUNT ON SELECT * FROM ?"''' -W -h-1 -o C:\DBA\?.txt -s "/"''' 

Antwort

0

Hier ein Trick ist es

zu tun
EXECUTE sp_MSforeachtable 'select ''?'' as org_string,replace(replace(''?'',''[dbo].['',''''),'']'','''') as result_string' 

Sie müssen die obige Logik in Ihrem Code hinzufügen.

Hinweis: Wenn Ihr Tabellenname hat [dbo].[ oder ] Zeichen in es diese versauen dann konnte

+0

Hallo PRDP Ich sehe, wie der obige Code auf seine eigenen funktioniert, aber ich bin nicht sicher, wie es funktioniert, wenn sie zu meinem Code. Ich habe versucht, es durch meine Select-Anweisung zu ersetzen – unreal

0

Dies können Sie mit Cursor und bcp Befehl tun.

use YOURDB; 
declare @tablename varchar(50), @schemaId int 
declare c cursor for 
select name, [schema_id] from sys.tables where type = 'U' and is_ms_shipped = 0 
open c 
fetch next from c into @tablename, @schemaId 
while @@FETCH_STATUS = 0 
begin 
declare @query varchar(1000) = 'bcp '+quotename(schema_name(@schemaId))+'.'+ 
quotename(@tablename)+' out C:\DBA\'[email protected]+'.txt -S SERVER\INSTANCE -d YOURDB -T -c' 
exec xp_cmdshell @query, no_output; 
fetch next from c into @dtableame, @schemaId 
end 
close c 
deallocate c 
0

Try this:

exec sp_MSforeachtable 'declare @query varchar(8000)=''sqlcmd -q "set nocount on;select * from ?" -o "''+''C:\DBA\''+replace(substring(''?'',charindex (''.'',''?'')+2,len(''?'')-1),'']'','''')+''.txt"''; 
          exec xp_cmdshell @query' 
Verwandte Themen