2017-01-05 5 views
0

Я пытаюсь экспортировать некоторые данные из одной из моих баз данных SQL Server. В нем содержится чуть более 300 таблиц, и я не видел никакого способа экспортировать эти данные с помощью мастера SSMS, поскольку он имеет только одну таблицу за раз. Мне нужно использовать разделитель «/». Поэтому я играл с xp_cmdshell, и, похоже, я делаю почти все, что мне нужно, кроме одного.Использование xp_cmdshell для экспорта всех таблиц в отдельные файлы txt

мне нужно просто вывести имя таблицы, как это:. Table1.txt, где сейчас он выдает в виде [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 "/"''' 

ответ

0

Вот один трюк, чтобы сделать это

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

Вам необходимо добавить вышеуказанную логику в свой код.

Примечание: Если имя таблицы имеет [dbo].[ или ] символов в нем, то это может испортить

+0

Привет ППРР Я вижу, как приведенный выше код работает на своем собственном, но я не знаю, как это работает при добавлении в мой код. Я попытался заменить его с помощью оператора Select – unreal

0

Вы можете сделать это с помощью курсора и BCP команды.

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

Попробуйте это:

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' 

 Смежные вопросы

  • Нет связанных вопросов^_^