выполнение нескольких сценариев SQL, закодированных в UTF-8 - PullRequest
1 голос
/ 11 октября 2010

Я использую проект базы данных Visual Studio 2008 для управления сценариями базы данных и контроля версий. по умолчанию шаблоны сценариев visual studio кодируются в формате UTF-8. Когда я пытаюсь объединить сценарии для выпуска базы данных (используя команду DOS "type * .sql> dbscripts.sql") и запускаю связанный сценарий из студии управления SQL-сервером, я получаю ошибку недопустимого символа. однако, если я преобразую каждый скрипт в формат ANSI (используя блокнот) и объединю их, я не получу никаких ошибок при запуске связанного скрипта. но преобразование каждого сценария в другой формат кодирования утомительно. Каков наилучший способ выполнения нескольких сценариев SQL независимо от формата кодирования сценариев? мне нужно создать командный файл и использовать sqlcmd для его запуска и перенаправить вывод в текстовый файл? есть ли альтернативы? Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 11 октября 2010

Это из-за спецификации в файле. Команда TYPE слишком примитивна, чтобы обнаружить ее, и просто скопирует 3 байта в вывод.

Вы можете изменить кодировку, используемую для файла .sql. Утомительно слишком кстати. Файл + Сохранить как, нажмите стрелку на кнопке Сохранить, Сохранить с кодировкой и выберите текущую кодовую страницу. Как и 1252 для Западной Европы и Америки, это, вероятно, первый в списке. Это то же самое, что вы сделали с Блокнотом.

Остерегайтесь неприятностей, с которыми вы можете столкнуться, если сервер работает с другой кодовой страницей, а ваши сценарии содержат символы с акцентом. Я бы сам написал небольшую утилиту, которая использует Directory.GetFiles и StreamReader / Writer для решения проблемы.

2 голосов
/ 02 января 2017

Простое решение - добавить флаг кодовой страницы в команду -f 65001

sqlcmd /S myServer /d myDatabase -E -f 65001 -i MyUTFScriptWithoutBOM.sql

1 голос
/ 18 октября 2010

нашел эту ссылку, которая генерирует команды "SQLCMD" с помощью Windows Powershell.для конкатенации похоже, что нет никакого решения, кроме сохранения каждого файла в формате ANSI.Я могу по крайней мере сгенерировать файл со всеми командами sqlcmd, используя это без необходимости объединять их

http://sqladm.blogspot.com/2010/02/generate-sqlcmd-statements.html

0 голосов
/ 11 октября 2010

Вы должны использовать copy *.sql dbscripts.sql

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