簡體   English   中英

將多個sql語句的輸出附加到一個文件中

[英]append output of multiple sql statements into one file

我有500個表格的數據庫。

選擇數據庫中每個表的前3行之后 ,我可以獲得每個表的前3行,但輸出為500個表。

是否可以將這些結果寫入單個csv / tab或| 分隔的文本文檔。

我想要

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

在最終文件中。

我正在使用MS SQL Server Management Studio

此解決方案有兩件事。

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM