将数据库从 SQL Server 2000 升级到更高版本后,应用程序可能会失败

症状

请考虑以下情况:

  • 在 SQL Server 2000 数据库中,表中有一个列配置为具有特定的默认值。

  • 将此数据库升级到更高版本的 SQL Server(SQL Server 2005 或 SQL Server 2008 或 SQL Server 2008 R2)。

在此方案中,您会注意到,在升级版本中,列的默认值周围将有一个附加的括号,并且编码为接受 SQL Server 2000 的原始默认值的任何应用程序都将失败。下表显示了不同版本的 SQL Server 如何在目录元数据表中存储默认值 0:

版本

SQL Server 2000

SQL Server 2005 或更高版本

(0)

((0))

注意:此问题仅影响数值。文本和函数将以相同的格式存储在 SQL Server 2000 和较新版本中。例如,文本将存储为 ('文本',函数()将存储为 (函数()。

原因

此行为是设计使然。较新版本的 SQL Server 与 SQL Server 2000 在目录元数据中解码和存储 SQL 表达式的方式不同。有关详细信息,请参阅本文"详细信息"部分中列出的各种链接。

解决方案

修改应用程序,以便它们接受新格式的默认值。例如,如果应用程序设计为默认值为"(0)"(围绕一个数值有一组括号),则将应用程序更改为预期两组括号"(0))",以便它继续使用 SQL Server 2005 及更高版本版本的数据库。

更多信息

如何查看列的默认值:可以使用以下两种方法之一来查看列当前配置的默认值:方法 1: 使用 SQL 服务器管理工作室:

  1. 在对象资源管理器中,右键单击具有要检查的的默认值的表,然后单击"设计"以在表设计器中打开表。

  2. 选择要检查默认值的列。

  3. 在"列属性"选项卡中,您将在"默认值"或"绑定"属性中找到默认值,如下图所示:

方法 2:使用以下系统视图之一:

  • sys.default_constraints - 使用"定义"列获取所需信息。

  • sys.syscomments - 使用此视图中的文本列获取必要的信息。注意:此 SQL Server 2000 系统表作为向后兼容性视图包含在内。我们建议您改用当前的 SQL Server 系统视图。要查找等效的系统视图或视图,请参阅下面的"其他参考"下的链接。

其他参考:

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×