我有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
答案 0 :(得分:0)
此解决方案有两件事。
认为这会有所帮助。我已经在数据库上对其进行了测试,然后一切都变得正常了。
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