2014-05-15 19 views
0
删除身份或公式

我想是设置或删除身份或公式表的SQL列,则SQL生成验证码:用了删除和重建表

CREATE TABLE dbo.Tmp_Table 
    (
    a int NOT NULL IDENTITY (1, 1) 
    )  ON [PRIMARY] 
GO 
ALTER TABLE dbo.Tmp_Table SET (LOCK_ESCALATION = TABLE) 
GO 

SET IDENTITY_INSERT dbo.Tmp_Table ON 

GO 
IF EXISTS(SELECT * FROM dbo.[Table]) 
    EXEC('INSERT INTO dbo.Tmp_Table (a) 
     SELECT a FROM dbo.[Table] WITH (HOLDLOCK TABLOCKX)') 
GO 
SET IDENTITY_INSERT dbo.Tmp_Table OFF 
GO 
DROP TABLE dbo.[Table] 
GO 
EXECUTE sp_rename N'dbo.Tmp_Table', N'Table', 'OBJECT' 

我写了一个脚本设置或删除身份或公式而删除表并重新创建它,因为我没有列的所有信息,如主键或外键。 (我想创建这样的例如设置NULL或不NULL,你只是写一个列名和一个列类型)。

我该怎么做?可以做到吗?

+0

http://stackoverflow.com/questions/8230257/sql-server-remove-identity-from-a-column-in-a-table – user2864740

回答

1

简单的答案是,你不能轻易做到这一点。如果你想删除一个身份规范,你必须删除并重新创建列(这比删除表的侵入性更小,但仍然很痛苦)。要保留数据,您需要创建没有标识规范的列的副本,然后在删除原始列并重命名新列之前复制数据。

问题是如果你有一个外键引用该列,那么你需要先删除它,然后重新创建它。幸运的是,您可以通过查询系统目录视图来获取有关某列的所有信息。你会感兴趣的是:

  • sys.columns
  • sys.foreign_keys
  • sys.foreign_key_columns

您还可能要sys.indexes之内,你要检查is_primary_key = 1获取信息一个主键,并获得PK列,你需要看看sys.index_columns。我不会详细介绍如何加入它们(它们全都链接在一起),因为您可以找到in the MSDN documentation

这是一个适当的痛苦脖子摆脱身份规范,我感到你的痛苦 - 我一直在那里自己。