导出到 csv 文件时为所有 VARCHAR 列附加引号

Append Quotes for all VARCHAR Columns when exporting to csv file

我有一个存储过程,当 运行 时给出 table 输出。我想将此过程导出到 csv 文件,但想为数据类型为 CHAR/VARCHAR.

的所有列附加 double/single 引号

例如:

存储过程O/P:

ID    Name    Address                  SSN
1      abd    9301,LeeHwy, 22031       64279100

CSV 文件中的输出:

 1,"abd","9301,LeeHwy, 22031",64279100

任何人都可以帮助我如何使用 BAT 文件来执行该过程并生成此 csv 文件。

执行此操作的一种方法是遍历 table 架构以提取 varchar 列。我已经为我的 table 之一测试过它,并且有效:

DECLARE @tableName VARCHAR(Max) = '[Put your table name here]';
DECLARE @currColumns VARCHAR(Max) = NULL;

SELECT @currColumns = COALESCE(@currColumns + ',' 
    + CASE WHEN t.Name  = 'varchar' THEN '''"'' + ' ELSE '' END 
    + '[', '[') + c.name + ']' 
    + CASE WHEN t.Name = 'varchar' THEN '+ ''"''' ELSE '' END
    + ' as [' + c.name + ']'
FROM    
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
WHERE
    c.object_id = OBJECT_ID(@tableName)

EXEC('SELECT ' + @currColumns + ' FROM ' + @tableName);

这是一种快速而肮脏的方式。

更新(评论): 插入 table 非常简单。只需这样做:

INSERT INTO [TABLE]
EXEC('SELECT ' + @currColumns + ' FROM ' + @tableName);

我找到了解决问题的方法。 感谢@Rogala(对问题给出初步答案的开发人员)触发了使用系统表的想法。

代码如下:

DECLARE @tableName VARCHAR(Max) = '[Put your table name here]';
DECLARE @currColumns VARCHAR(Max) = NULL;
Declare @Delim CHAR(5)='''"''+'

SELECT @currColumns = COALESCE(@currColumns + ','+ CASE WHEN DATA_TYPE= 'varchar' THEN '''"'' + ' ELSE '' END + '[', '[') + COLUMN_NAME + ']'
                    + CASE WHEN DATA_TYPE = 'varchar' THEN '+ ''"''' ELSE '' END + ' as [' + COLUMN_NAME + ']' 
FROM INFORMATION_SCHEMA.Columns
WHERE  table_name = @tableName 

Set @currColumns= @Delim+@currColumns

EXEC('SELECT ' + @currColumns + ' FROM ' + @tableName);