【问题标题】:executing multiple SQL scripts encoded in UTF-8执行多个以 UTF-8 编码的 SQL 脚本
【发布时间】:2011-04-23 21:15:16
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      请注意,如果服务器使用不同的代码页运行并且您的脚本包含重音字符,您可能会遇到麻烦。我会自己编写一个使用 Directory.GetFiles 和 StreamReader/Writer 来解决问题的小实用程序。

      【讨论】:

        【解决方案3】:

        找到这个使用 Windows Powershell 生成“SQLCMD”命令的链接。对于连接,除了将每个文件保存为 ANSI 格式之外,似乎没有其他解决方案。我至少可以使用它生成一个包含所有 sqlcmd 命令的文件,而无需连接它们

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 已经试过了,还是不行,还是出现无效字符错误。
          • @RKP,如果你先合并文件然后转换成ansi最终文件怎么办。所以你只需要进行一次转换..值得一试..
          • 不,我也试过那个,但没有用。在这种情况下,无效字符是可见的,这是唯一的区别。我想通过创建批处理文件并将所有文件名放入其中,使用“sqlcmd”命令似乎是唯一的选择。我本可以覆盖 Visual Studio 模板以使用 ANSI 格式,但我正在寻找一种更好的方法来解决这个问题。感谢您的回复。
          猜你喜欢
          • 1970-01-01
          • 2019-01-10
          • 2011-11-19
          • 2012-08-02
          • 2013-07-04
          • 1970-01-01
          • 2014-05-14
          • 2019-12-19
          • 1970-01-01
          相关资源
          最近更新 更多