Публикация проекта SSDT не работает с юникодом в PostDeploy — какие-либо обходные пути или конфигурации, чтобы исправить это?

Мы используем SSDT для публикации изменений в экземпляре SQL Server 2005. Мы кодируем файл PostDeploy SQL, который обрабатывает обновление всех наших статических данных, и он работает очень хорошо... но только если я выполняю сценарий PostDeploy вручную. Если я позволю SSDT вытолкнуть его как фактическую операцию публикации/постдеплоя, он с треском провалится, потому что искажает все символы, отличные от ASCII.

Например

INSERT INTO ##RawData ([FieldID], [FormPageID], [Name], [IsVisible], [DataTypeID], [LookupID], [MaxLength], [DecimalPlaces], [RequiredTypeID], [QuestionLeader], [Text_En], [AdditionalText_En], [StatsVariable], [AdditionalStatsVariable1], [AdditionalStatsVariable2], [StatsDescription], [ApplicabilityLogic], [FieldValueLogic], [Text_Sp], [AdditionalText_Sp]) VALUES (N'92', N'7', N'OtherHeartDisease', N'1', N'2', N'921', N'1', NULL, N'1', N'D.17', N'Have you ever been told you have any other heart disease? ', N'What other heart disease? ', N'svohd', NULL, NULL, N'D17. Other heart disease', NULL, NULL, N'¿Le han dicho alguna vez si tiene alguna otra enfermedad cardiaca?', N'¿Qué otra enfermedad cardiaca?')

становится

INSERT INTO ##RawData ([FieldID], [FormPageID], [Name], [IsVisible], [DataTypeID], [LookupID], [MaxLength], [DecimalPlaces], [RequiredTypeID], [QuestionLeader], [Text_En], [AdditionalText_En], [StatsVariable], [AdditionalStatsVariable1], [AdditionalStatsVariable2], [StatsDescription], [ApplicabilityLogic], [FieldValueLogic], [Text_Sp], [AdditionalText_Sp]) VALUES (N'92', N'7', N'OtherHeartDisease', N'1', N'2', N'921', N'1', NULL, N'1', N'D.17', N'Have you ever been told you have any other heart disease? ', N'What other heart disease? ', N'svohd', NULL, NULL, N'D17. Other heart disease', NULL, NULL, N'�Le han dicho alguna vez si tiene alguna otra enfermedad cardiaca?', N'�Qu� otra enfermedad cardiaca?')

И это то, что на самом деле появляется в базе данных - ¿Qué становится 'Qu' или ?Qu? или что-то подобное. Является ли это полным ограничением инструмента SSDT или есть какая-то непонятная конфигурация или обходной путь, о котором я не знаю? Я пытаюсь сократить количество ручных сценариев в процессе развертывания до минимума, чтобы избавить разработчиков от головной боли, поэтому избавление от «опубликовать, а затем выполнить сценарий данных» было бы большим подспорьем.

База данных настроена с сопоставлением sql_latin1_general_cp1_ci_as, но это столбцы NVARCHAR, поэтому это не имеет значения.


person Pxtl    schedule 25.09.2014    source источник


Ответы (1)


Я понял!

Обходной путь состоял в том, чтобы закодировать файл PostDeploy как UTF-16 (кодовая страница 1200). По-видимому, SSDT сильно терпит неудачу в сценариях SQL, закодированных в UTF-8. Многие инструменты MS не работают с UTF-8, так что неудивительно.

person Pxtl    schedule 25.09.2014
comment
как вы изменили кодировку файла? Я не вижу ничего в окне свойств в Visual Studio, чтобы сделать это! ОБНОВЛЕНИЕ: нашел. Вы не можете сделать это внутри проекта, вы должны сделать это на диске/в системе контроля версий. - person gvee; 30.12.2015