यह प्रक्रिया एक पैरामीटर के रूप में आपके द्वारा पारित क्वेरी के आउटपुट के साथ एक सीएसवी फ़ाइल उत्पन्न करेगी। दूसरा पैरामीटर आपका CSV फ़ाइल नाम है, सुनिश्चित करें कि आप फ़ाइल नाम को किसी मान्य लेखन पथ से पास करते हैं।
यहाँ प्रक्रिया बनाने के लिए स्क्रिप्ट है:
CREATE procedure [dbo].[usp_create_csv_file_from_query]
@sql Nvarchar(MAX),
@csvfile Nvarchar(200)
as
BEGIN
if IsNull(@sql,'') = '' or IsNull(@csvfile,'') = ''
begin
RAISERROR ('Invalid SQL/CsvFile values passed!; Aborting...', 0, 1) WITH NOWAIT
return
end
DROP TABLE if exists global_temp_CSVtable;
declare
@columnList varchar(4000),
@columnList1 varchar(4000),
@sqlcmd varchar(4000),
@dos_cmd nvarchar(4000)
set @sqlcmd = replace(@sql, 'from', 'into global_temp_CSVtable from')
EXECUTE (@sqlcmd);
declare @cols table (i int identity, colname varchar(100))
insert into @cols
select column_name
from information_schema.COLUMNS
where TABLE_NAME = 'global_temp_CSVtable'
declare @i int, @maxi int
select @i = 1, @maxi = MAX(i) from @cols
while(@i <= @maxi)
begin
select @sql = 'alter table global_temp_CSVtable alter column [' + colname + '] VARCHAR(max) NULL'
from @cols
where i = @i
exec sp_executesql @sql
select @i = @i + 1
end
SELECT
@columnList = COALESCE(@columnList + ''', ''', '') + column_name
,@columnList1 = COALESCE(@columnList1 + ', ', '') + column_name
from information_schema.columns
where table_name = 'global_temp_CSVtable'
ORDER BY ORDINAL_POSITION;
SELECT @columnList = '''' + @columnList + '''';
SELECT @dos_cmd='BCP "SELECT ' + @columnList +
' UNION ALL ' +
'SELECT * from ' + db_name() + '..global_temp_CSVtable" ' +
'QUERYOUT ' + @csvfile +
' -c -t, -T'
exec master.dbo.xp_cmdshell @dos_cmd, No_output
DROP TABLE if exists global_temp_CSVtable;
end