Могу я спросить, есть ли способ поставить двойные кавычки "" в каждый столбец выходного файла, экспортированного SQLCMD, SQL Server 2016, как показано ниже?
ex.
"TEST1", "TEST2", "TEST3"
"TEST1", "TEST2", "TEST3"
Мы хотим экспортировать файлы для AWS Redshift через корзину S3.
Если на SQLCMD нет подходящих опций, возможно, нам лучше проверить Invoke-Sqlcmd, PowerShell. Если у вас есть более лучший и простой способ, любой ваш совет будет оценен.
Спасибо.
Большое спасибо за ваш быстрый комментарий, @Vlam. К сожалению, -I не работает так, как я ожидал ... Я попробовал -I в моем сценарии следующим образом (возможно, что-то не так); sqlcmd -Q "УСТАНОВИТЬ NoCount ON;! STR_COMMAND !;" -I -o! OUTPUT_FILE! -u -s, -W -h -1! CONN_PARAM!
-Я работаю? У меня не работает





Я думаю, вам нужно использовать функцию QUOTENAME, потому что двойная кавычка в sqlserver указывает только имя столбца
SELECT QUOTENAME(TEST1, '"'), QUOTENAME(TEST2, '"'), QUOTENAME(TEST3, '"')
FROM t
Большое спасибо за вашу полезную информацию. Если я не могу найти простой вариант, я попробую кавычки для каждого столбца! (Поскольку у нас много целевых таблиц с разной структурой столбцов, я бы хотел найти что-то более ленивый :))
Имеет ли значение использование '"' вместо CHAR (34)?
Просто F.Y.I., наконец, я выбрал PowerShell для этой цели.
Invoke-Sqlcmd -Query $StrQry -ServerInstance $StrSvrName -IgnoreProviderContext | Export-Csv -path $StrExpFile -Encoding UTF8
Столбцы каждого выходного файла заключены в двойные кавычки, как я ожидал.
Выходной файл включает дополнительные строки, поэтому я пропускаю их с помощью параметров команды копирования AWS IGNOREHEADER 2 при загрузке в корзину S3.
Спасибо.
Для следующего человека, который бьет головой, пытаясь понять это. Мне нужно было вызвать командный файл из 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","';
извините за мое позднее признание, но спасибо за вашу полезную информацию :)
Вы пробовали -I в sqlcmd, чтобы включить цитируемые идентификаторы?