导出到 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);
我有一个存储过程,当 运行 时给出 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);