SQLCMD: Можем ли мы поставить двойные кавычки в выходной файл? - PullRequest
0 голосов
/ 26 сентября 2018

Могу ли я спросить, есть ли способ поставить двойные кавычки "" в каждый столбец выходного файла, экспортируемого SQLCMD, SQL Server 2016, следующим образом?

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

Мы хотели бы экспортировать файлыдля AWS Redshift через корзину S3.

Если на SQLCMD нет подходящих опций, возможно, нам лучше проверить Invoke-Sqlcmd, PowerShell.Если у вас есть более лучший и простой способ, любой ваш совет будет оценен.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Просто к вашему сведению, наконец, я выбрал PowerShell для этой свиньи.

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

Каждый столбец выходного файла заключен в "" двойные кавычки, как мои ожидания.

Выходной файл содержит дополнительные строки, поэтомуЯ пропускаю их с помощью параметров команды копирования AWS «IGNOREHEADER 2» при загрузке в корзину S3.

Спасибо.

0 голосов
/ 29 ноября 2018

Для следующего человека, стучащего головой, пытающегося понять это.Мне нужно было вызвать командный файл из XP_CMDSHELL, который вызвал SQLCMD, который вызвал запрос SQL из файла.Зачем?Поскольку запрос имеет двойные кавычки, окружающие имена столбцов, которые генерируются динамически, чтобы данные запятых в полях не мешали процессу экспорта CSV в SQLCMD.(запятая).Это так же просто, как добавить -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","';
0 голосов
/ 26 сентября 2018

Я думаю, что вы должны использовать функцию QUOTENAME, потому что двойные кавычки в sqlserver указывают только имя столбца

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

подробнее о функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...