Sql server 执行多个UTF-8编码的SQL脚本
我使用VisualStudio2008数据库项目来管理我的数据库脚本和版本控制。默认情况下,VisualStudio脚本模板以UTF-8格式编码。当我尝试连接用于数据库发布的脚本(使用DOS命令“type*.sql>dbscripts.sql”)并从SQLServerManagementStudio运行连接的脚本时,出现无效字符错误。但是,如果我将每个脚本转换为ANSI格式(使用记事本),并连接它们,那么在运行连接的脚本时不会出现任何错误。但是,将每个脚本转换成不同的编码格式是乏味的。无论脚本的编码格式如何,执行多个SQL脚本的最佳方法是什么?我是否需要创建一个批处理文件并使用sqlcmd运行它并将输出重定向到文本文件?还有其他选择吗?Sql server 执行多个UTF-8编码的SQL脚本,sql-server,visual-studio,visual-studio-2008,sql-server-2008,Sql Server,Visual Studio,Visual Studio 2008,Sql Server 2008,我使用VisualStudio2008数据库项目来管理我的数据库脚本和版本控制。默认情况下,VisualStudio脚本模板以UTF-8格式编码。当我尝试连接用于数据库发布的脚本(使用DOS命令“type*.sql>dbscripts.sql”)并从SQLServerManagementStudio运行连接的脚本时,出现无效字符错误。但是,如果我将每个脚本转换为ANSI格式(使用记事本),并连接它们,那么在运行连接的脚本时不会出现任何错误。但是,将每个脚本转换成不同的编码格式是乏味的。无论脚本的
提前谢谢。这是因为文件中有BOM表。TYPE命令太原始,无法检测它,只会将3个字节复制到输出 您可以更改用于.sql文件的编码。文件+另存为,单击“保存”按钮上的箭头,使用编码保存并选择当前代码页。就像西欧和美洲的1252一样,它可能是名单上的第一个。这和你用记事本做的一样
如果服务器使用不同的代码页运行,并且您的脚本包含重音字符,请小心可能会遇到的麻烦。我会自己编写一个小实用程序,使用Directory.GetFiles和StreamReader/Writer来解决这个问题。这是因为文件中有BOM表。TYPE命令太原始,无法检测它,只会将3个字节复制到输出 您可以更改用于.sql文件的编码。文件+另存为,单击“保存”按钮上的箭头,使用编码保存并选择当前代码页。就像西欧和美洲的1252一样,它可能是名单上的第一个。这和你用记事本做的一样
如果服务器使用不同的代码页运行,并且您的脚本包含重音字符,请小心可能会遇到的麻烦。我会自己编写一个小实用程序,使用Directory.GetFiles和StreamReader/Writer来解决这个问题。你应该使用
copy*.sql dbscripts.sql
你应该使用copy*.sql dbscripts.sql
找到这个链接,它使用Windows Powershell生成“SQLCMD”命令。对于连接,除了以ANSI格式保存每个文件外,似乎没有其他解决方案。我至少可以使用该命令生成一个包含所有sqlcmd命令的文件,而不必连接它们
找到此链接,该链接使用Windows Powershell生成“SQLCMD”命令。对于连接,除了以ANSI格式保存每个文件外,似乎没有其他解决方案。我至少可以使用该命令生成一个包含所有sqlcmd命令的文件,而不必连接它们
简单的解决方案是在命令-f 65001中添加代码页标志
sqlcmd/S myServer/d myDatabase-E-f 65001-i myutfscript without bom.sql
简单的解决方案是在命令-f 65001中添加代码页标志
sqlcmd/S myServer/d myDatabase-E-f 65001-i MyUTFScriptWithoutBOM.sql
已经尝试过了,但也不起作用,我仍然收到无效字符错误。@RKP,如果先合并文件,然后将最终文件转换为ansi,该怎么办。所以你只需要做一次转换。。值得一试……不,我也试过了,但没有成功。在这种情况下,无效字符可见,这是唯一的区别。我猜使用“sqlcmd”命令似乎是创建批处理文件并将所有文件名放入其中的唯一选项。我本可以重写VisualStudio模板以使用ANSI格式,但我正在寻找更好的方法来解决此问题。谢谢您的回复。已经尝试过了,但也没有成功,我仍然收到无效字符错误。@RKP,如果您先合并文件,然后将最终文件转换为ansi,该怎么办。所以你只需要做一次转换。。值得一试……不,我也试过了,但没有成功。在这种情况下,无效字符可见,这是唯一的区别。我猜使用“sqlcmd”命令似乎是创建批处理文件并将所有文件名放入其中的唯一选项。我本可以重写VisualStudio模板以使用ANSI格式,但我正在寻找更好的方法来解决此问题。谢谢你的回复。