当前位置: 网学 > 编程文档 > SQL SERVER > 正文

SQL Server中为现有的列添加或去掉标识属性

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/19
下载{$ArticleTitle}原创论文样式
Tmp_Test1”重命名为“Test1”
  •   在表“Test1”里创建主键
  •   最后重新在表“Test2”里创建外键约束。步骤太多了!
  • 以下是引用片段:
    /* To prevent any potential data loss issues, you should review this
     script in detail before running it outside the context of the database designer.*/
    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Tmp_Test1
       (
       id INT NOT NULL,
       name NCHAR(10) NULL
       )  ON [PRIMARY]
    GO
    IF EXISTS(SELECT * FROM dbo.Test1)
        EXEC(''INSERT INTO dbo.Tmp_Test1 (id, name)
          SELECT id, name FROM dbo.Test1 WITH (HOLDLOCK TABLOCKX)'')
    GO
    ALTER TABLE dbo.Test2
       DROP CONSTRAINT FK_Test2_Test1
    GO
    DROP TABLE dbo.Test1
    GO
    EXECUTE sp_rename N''dbo.Tmp_Test1'', N''Test1'', ''OBJECT'' 
    GO
    ALTER TABLE dbo.Test1 ADD CONSTRAINT
       PK_Test1 PRIMARY KEY CLUSTERED 
       (
       id
       ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
    ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

    GO
    COMMIT
    BEGIN TRANSACTION
    GO
    ALTER TABLE dbo.Test2 ADD CONSTRAINT
       FK_Test2_Test1 FOREIGN KEY
       (
       id
       ) REFERENCES dbo.Test1
       (
       id
       ) ON UPDATE  NO ACTION 
        ON DELETE  NO ACTION 
       
    GO
    COMMIT

      同样,如果我们想要对现有的列进行修改,把其中一列变成标识列的话,需要花费同样的工夫。

      另外一种可行的方法就是增加一列并设置为标识列,或者增加一列然后把旧列的数据移植到新列里。然后你可以删除之前的列,使用sp_rename存储过程来对进行新增列重命名。如果这些列里含有索引、外键或其他约束,你需要把它们都去掉才能作上述的修改。所以,这个方法也快不了多少。

      我们现在知道,要修改现有列的标识属性没有什么捷径可走。你也可以在网络上搜索到其他的办法,可以修改系统表里的值。这些方法确实可以行得通,不过要注意的是,一旦出了什么差错,你可能会把数据全毁掉。

      对于比较小的数据库系统而言,这里介绍的方法没有什么太大问题。不过对于忙碌的大数据库系统来说,去掉表里的约束、修改表里的标识属性就会是一件让人头疼的事情了。现在只能是期待SQL 2008里会不会出现什么让人眼前一亮的新特性了。

    网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号