Несколько вещей с этим решением.
- xp_cmdshell используется, и это может быть плохо.Он также должен быть настроен для использования, так что, вероятно, не лучший способ получить CSV.
- Это создает CSV внутри временной таблицы, и это то, что экспортируется.
- НекоторыеКолонки не конвертируются в 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