代码之家  ›  专栏  ›  技术社区  ›  Dan Andreatta

表名中包含中文字符的DBCC CHECKIDENT问题

  •  0
  • Dan Andreatta  · 技术社区  · 15 年前

    我正在维护一个使用SQL Server Express 2005作为后端的应用程序。该应用程序允许用户创建新数据库并提供新数据库的名称。

    当应用程序加载默认数据时,我进行以下SQL调用:

    DBCC CHECKIDENT('[myDB].[CsSchema].[CsMyDataType]', RESEED) WITH NO_INFOMSGS
    

    只要一切都是英文的,代码就可以正常工作。

    但如果用户在数据库名称中指定了中文字符,则调用如下所示:

    DBCC CHECKIDENT('[e安丞北e].[CsSchema].[CsMyDataType]', RESEED) WITH NO_INFOMSGS
    

    此调用失败,并显示以下错误消息: “找不到数据库'E'???。该数据库不存在,或者在语句尝试使用它之前被删除。“

    我用数据库名称进行了许多其他正常工作的调用。例如,此语句执行时没有问题。

    SET IDENTITY_INSERT [e安丞北e].[CsSchema].[CsMyDataType] OFF
    

    错误似乎是特定于DBCC CHECKIDENT调用的。有什么想法吗?

    注意:我运行的是中文版的Windows XP。

    1 回复  |  直到 13 年前
        1
  •  1
  •   Lucero    15 年前

    尝试将字符串作为unicode传递( see KB ):

    DBCC CHECKIDENT(N'[e安丞北e].[CsSchema].[CsMyDataType]', RESEED) WITH NO_INFOMSGS