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

时间:2018-09-26 06:46:55

标签: sql-server amazon-s3 sqlcmd

请问有什么方法可以在SQLCMD,SQL Server 2016导出的输出文件的每一列中加上双引号“”,如下所示?

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

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

如果SQLCMD上没有适当的选项,也许我们最好验证一下PowerShell的Invoke-Sqlcmd。 如果您有更好,更简单的方法,那么您的任何建议都会被采纳。

谢谢。

3 个答案:

答案 0 :(得分:1)

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

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

more about function

答案 1 :(得分:1)

就F.Y.I.,最后,我为此选择了PowerShell。

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

每个输出文件列都用双引号引起来,这是我的期望。

输出文件包含多余的行,因此在上传到S3存储桶时,我会通过AWS复制命令选项'IGNOREHEADER 2'跳过它们。

谢谢。

答案 2 :(得分:1)

对于下一个想办法解决这个问题的人。我需要从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","';