执行以UTF-8编码的多个SQL脚本

时间:2010-10-11 15:27:14

标签: sql-server visual-studio visual-studio-2008 sql-server-2008

我使用Visual Studio 2008数据库项目来管理我的数据库脚本和版本控制。默认情况下,visual studio脚本模板以UTF-8格式编码。当我尝试连接数据库发布的脚本(使用DOS命令“type * .sql> dbscripts.sql”)并从SQL Server管理工作室运行连接脚本时,我得到无效的字符错误。但是,如果我将每个脚本转换为ANSI格式(使用记事本),并连接它们,那么当我运行连接脚本时,我不会得到任何错误。但是将每个脚本转换为不同的编码格式是单调乏味的。无论脚本的编码格式如何,执行多个SQL脚本的最佳方法是什么?我是否需要创建批处理文件并使用sqlcmd来运行它并将输出重定向到文本文件?还有其他选择吗? 提前谢谢。

4 个答案:

答案 0 :(得分:3)

这是因为文件中的BOM。 TYPE命令太原始而无法检测到它,只会将3个字节复制到输出中。

您可以更改.sql文件使用的编码。单调乏味。文件+另存为,单击保存按钮上的箭头,使用编码保存并选择当前代码页。与西欧和美洲的1252一样,它可能是列表中的第一个。这与您使用记事本的操作相同。

如果服务器使用不同的代码页运行且脚本包含重音字符,请注意您可能遇到的问题。我本人只想编写一个使用Directory.GetFiles和StreamReader / Writer来修复问题的小工具。

答案 1 :(得分:2)

简单的解决方案是将代码页标志添加到命令-f 65001

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

答案 2 :(得分:1)

发现此链接使用Windows Powershell生成“SQLCMD”命令。对于连接,看起来除了以ANSI格式保存每个文件之外没有其他解决方案。我至少可以使用它来生成包含所有sqlcmd命令的文件,而不必将它们连接起来

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

答案 3 :(得分:0)

您应该使用copy *.sql dbscripts.sql