SQLCMD:我们可以在输出文件中加上双引号吗?

SQLCMD : Can we put double quotation mark to output file ?

请问有什么方法可以在SQLCMD,SQLServer 2016导出的输出文件的每一列都加上双引号""如下?

ex.
"TEST1", "TEST2", "TEST3"
"TEST1", "TEST2", "TEST3"

我们想通过 S3 存储桶为 AWS Redshift 导出文件。

如果SQLCMD没有合适的选项,也许我们最好验证一下Invoke-Sqlcmd,PowerShell。 如果您有更好更简单的方法,欢迎您的指教。

谢谢。

我认为你必须使用 QUOTENAME 函数,因为 sql server 中的双引号仅表示列名

SELECT QUOTENAME(TEST1, '"'), QUOTENAME(TEST2, '"'), QUOTENAME(TEST3, '"')
    FROM t

more about function

就F.Y.I.,最后我选择了PowerShell作为这个目标。

Invoke-Sqlcmd -Query $StrQry -ServerInstance $StrSvrName -IgnoreProviderContext | Export-Csv -path $StrExpFile -Encoding UTF8

每个输出文件列都按照我的期望用“”双引号引起来。

输出文件包含额外的行,所以我在上传到 S3 存储桶时通过 AWS 复制命令选项 'IGNOREHEADER 2' 跳过它们。

谢谢。

对于下一个试图解决这个问题的人来说。我需要从 XP_CMDSHELL 调用一个批处理文件,它调用了 SQLCMD,它从一个文件中调用了一个 SQL 查询。为什么?因为查询在列名周围有双引号,是动态生成的,所以字段中的逗号数据不会干扰 SQLCMD 的 CSV 导出过程。 (逗号分隔)。就像为带引号的标识符添加 -I 一样简单。然后,您可以将双引号查询嵌入到字符串中或继续从文件中获取它。

简单测试:

批处理文件:

 sqlcmd -E -S PGCDWDEV02 -d ANALYTICS -I -i D:\extractH\sqlquery.sql -o D:\output.txt

sql 文件:

   SELECT "TABLE_NAME" FROM INFORMATION_SCHEMA.TABLES

实盘合计:

    DECLARE @SQLCMD VARCHAR(4000);
    SET @SQLCMD
         = 'sqlcmd -S ' + @@SERVERNAME + ' -d ' + @db_name + ' -E -I -i ' + 
              @queryFile + ' -o "' + @root_path + ''
                + @object_name + '.csv" -W -w 10000 -s","';