我们正在使用SSDT将更改发布到SQL Server 2005实例。我们编写了一个PostDeploy SQL文件来处理更新我们所有的静态数据,它运行得很好......但是只有我手动执行PostDeploy脚本 。如果我让SSDT将其作为一个实际的Publish / PostDeploy操作推出,它会失败,因为它会惹恼所有非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列,因此无关紧要。
答案 0 :(得分:3)
我知道了!
解决方法是将PostDeploy文件编码为UTF-16(代码页1200)。显然,SSDT在以UTF-8编码的SQL脚本上失败了。很多MS工具在UTF-8上都失败了,所以不用担心。