【问题标题】:SQL Server renaming tables with contraintsSQL Server 重命名带有约束的表
【发布时间】:2014-12-01 13:17:55
【问题描述】:

我所处的困境非常简单。

基本上我有四个表,主键/外键和级联约束是这样的。

CREATE TABLE [Board]
(
 [BoardId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED ( [BoardId] )
,[Name] [nvarchar](100) NOT NULL
,[Description] [nvarchar](max) NULL
,[PortalId] [int] NOT NULL FOREIGN KEY ( [PortalId] ) REFERENCES Portals ( [PortalID] ) ON DELETE CASCADE ON UPDATE CASCADE
,[OrganizerId] [int] NOT NULL
,[GroupId] [int] NULL
,[ModuleId] [int] NOT NULL FOREIGN KEY ( [ModuleId] ) REFERENCES Modules ( [ModuleID] ) ON DELETE CASCADE ON UPDATE CASCADE
,[CreatedByUserId] [int] NOT NULL
,[CreatedOnDate] [datetime] NOT NULL
,[LastModifiedByUserId] [int] NULL
,[LastModifiedOnDate] [datetime] NULL
)
GO

已经到了需要重命名原始表的地步。我过去曾使用 sp_rename oldTableName, newTableName 重命名表,但没有使用主约束、外部约束和级联约束的表。

使用sp_rename 重命名表是否足够安全,或者我应该求助于从头开始创建表、复制数据然后删除旧表?

【问题讨论】:

  • 据我所知,约束链接在 objectid 而不是名称上。这意味着您应该没有问题。会导致问题的是引用该对象的过程、函数等。 msdn.microsoft.com/en-us/library/ms188351.aspx
  • 我已经考虑过了,并将我的所有程序都转换为服务器端代码,所以这应该不是问题。

标签: sql-server table-rename sp-rename


【解决方案1】:

只是为了结束这个问题。

我最初提出的使用sp_rename oldTableName, newTableName 的解决方案对我来说效果很好。

但正如@jaques 指出的那样,您需要对可能附加到这些表格的任何stored procedures 感到厌烦。因为存储过程处理表名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2023-04-04
    • 2010-12-29
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多