【问题标题】:append output of multiple sql statements into one file将多个 sql 语句的输出附加到一个文件中
【发布时间】:2019-06-21 18:11:40
【问题描述】:

我有一个包含 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

【问题讨论】:

  • 你的编程怎么样?您可能需要在外部工具中执行此操作,或者使用比上一个问题更复杂的动态 sql。
  • @TomC 我的 SQL 编程很基础,但可以在 R/python 中这样做
  • @a_horse_with_no_name 我修改了我的问题

标签: sql sql-server ssms


【解决方案1】:

这个解决方案的几件事。

  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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多