добавить вывод нескольких операторов SQL в один файл - PullRequest
0 голосов
/ 21 июня 2019

У меня есть база данных из 500 таблиц.

После Выберите первые 3 строки каждой таблицы в базе данных , я могу получить первые 3 строки каждой таблицы, но вывод500 таблиц.

Можно ли записать эти результаты в одну CSV / Tab или |Текстовый документ с разделителями.

Я бы хотел

col1 col2 col3
...  ...  ...
...  ...  ...
...  ...  ...
col1 col2 col3 col4 col5
...  ...  ...  ...  ...

в конечном файле.

Я использую MS SQL Server Management Studio

1 Ответ

0 голосов
/ 21 июня 2019

Несколько вещей с этим решением.

  1. xp_cmdshell используется, и это может быть плохо.Он также должен быть настроен для использования, так что, вероятно, не лучший способ получить CSV.
  2. Это создает CSV внутри временной таблицы, и это то, что экспортируется.
  3. НекоторыеКолонки не конвертируются в varchar (например, varbinary, image и т. д.)

Думаю, это поможет.Я проверил это в своей базе данных, и я получил все.

DROP TABLE IF EXISTS ##Temp
CREATE TABLE ##Temp
(
Col varchar(max)
)
Declare @sql varchar(max) = ''
Select @sql=@sql+'INSERT ##Temp SELECT TOP 3 ' + colnames + ' FROM [' + SCHEMA_NAME(schema_id) + '].['+name+']'+';'
from
(
select  a.object_id, a.name, a.schema_id, STUFF((SELECT '+'',''+Convert(varchar(max), ' + QUOTENAME(a.name)  + ')'
FROM 
(Select * from sys.columns c where object_id = a.object_id) a
ORDER BY a.column_id   
            FOR XML PATH(''), TYPE    
            ).value('.', 'NVARCHAR(MAX)')    
        ,1,5,'')  colnames
FROM sys.tables a
) a

exec (@sql)
delete #Temp where Col is null
declare @TempFileName varchar(255) = 'C:\Temp\Youfile.csv'
Select @Command = 'bcp "Select * from ##Temp" queryout "' + @TempFileName + '" -S' + @@ServerName + ' -T -c -q'
exec xp_cmdshell @Command, NO_OUTPUT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...