将多个sql语句的输出附加到一个文件中

时间:2019-06-21 04:52:19

标签: sql sql-server ssms

我有500个表的数据库。

Select the first 3 rows of each table in a database之后,我可以获得每个表的前3行,但输出为500个表。

是否可以将这些结果写入单个csv / tab或|分隔的文本文档。

我想要

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

在最终文件中。

我正在使用MS SQL Server Management Studio

1 个答案:

答案 0 :(得分:0)

此解决方案有两件事。

    使用
  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