У меня есть SQLCMD ниже (он отлично работает), который я выполняю из командной строки для записи данных SQL в файл .csv.У меня возникла проблема с запятыми, которые находятся внутри значений базы данных (что разрушает разделение csv), приведя строковое поле к nvarchar (100), окруженному двойными кавычками, например:
SQLCMD -s"," -S servername -U username -d databasename -W -o
"mydatafile.csv” -Q "SET NOCOUNT ON
SELECT Account,'""' + cast ([ColDescription] as nvarchar(100)) + '""' as ColumnDescription" FROM myTable
.... столбец с экранированными двойными-двойными кавычками - это ColDescription, а исходное строковое поле на самом деле содержит 100 символов.Итак, это исправило мою проблему, но теперь я столкнулся с новой проблемой со значениями в моей базе данных, которые начинаются с кавычек.Для тех записей, где значение данных фактически начинается с кавычек, я предполагаю, что я хотел бы избежать с 3 экземплярами двойных кавычек (так, чтобы в строке результата были экранированы все двойные кавычки).
Но,Как я могу сказать SQL, чтобы избежать любого количества экземпляров двойных кавычек?Я не знаю, какие записи будут иметь двойные кавычки, или 2 двойные кавычки, или что.
Еще лучше, в идеале я хотел бы отобразить двойные кавычки в моем файле .csv, если они существуют вданные.Так что, возможно, мне вообще не нужно их избегать.Я не уверен, что я ищу правильные слова для этой проблемы.Я думаю, что я хочу избежать шаблона символов ... это звучит как вещь в стиле REGEX?Я не использовал REGEX в sql раньше, и мой инстинкт говорит мне, что это слишком сложно для проблемы, которая кажется распространенной и должна быть решена раньше.
РЕДАКТИРОВАТЬ: Я также попробовал новый подход, когда я комментировалниже.Я изменил свой SQLCMD на следующий (хотя это урезанная версия моего «реального» запроса).Но обратите внимание, я использовал функцию Replace, чтобы заменить все кавычки на 2 кавычки.Я думал, что, сделав четное количество кавычек, все они будут экранированы при экспорте в .csv.
SQLCMD -s"," -S servername -U username -d databasename -W -o
"mydatafile.csv” -Q "SET NOCOUNT ON
SELECT Account,'""' + Replace(cast ([ColDescription] as
nvarchar(100)),'"','""') + '""' as ColumnDescription" FROM myTable
... Но теперь моя ошибка в командной строке - «Неожиданный аргумент».Я думаю, что «Заменить» - это ключевое слово, которое, возможно, мне также нужно было бы экранировать в Windows ...?Впрочем, новый оператор Select отлично работает прямо в SQL.Я просто больше не могу выполнять команду.