欢迎来到天天文库
浏览记录
ID:22377494
大小:62.50 KB
页数:7页
时间:2018-10-28
《sql server中为现有的列添加或去掉标识属性--》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、SQLServer中为现有的列添加或去掉标识属性>> 问题: SQLServer有一个不错的常用特性,就是标识列。利用这个特性,你可以轻松地在表里为每一行创建唯一的值。添加一个新的列并设置为标识列,或者删除现有标识列都很简单,但是如果是要把一个现有的列改为标识列,或者去掉现有的标识列的标识属性,那应该怎么做呢? 专家解答: 要做到这一步并不容易,或者说没有什么简单易行的方法。SQLServer的设计里并没有很简单的就现有的列加上或去掉标识属性的方法。最安全的办法是,创建一个新的列并设置为标识列,或者创建一个新的表,然后把数据移植进去。 我们来看看
2、一些例子: 例一 现有一个简单的表,表里含有两列,其中一列为标识列。CREATETABLE[dbo].[Test1]( [id][int]IDENTITY(1,1)NOTNULL, [name][nchar](10)NULL) 如果我们用SQLServerManagementStudio来去掉id列的标识值,这样就会创建出一个新的临时表,原表的数据都移到了临时表中,然后删除原表并为新表重命名。我们可以从下面的脚本里看到这个过程。 要看到这个脚本,只要使用ManagementStudio来进行改动,然后右击designer,选择GenerateCha
3、ngeScript。以下是引用片段:/*Topreventanypotentialdatalossissues,youshouldreviep_Test1 ( idINTNOTNULL, nameNCHAR(10)NULL ) ON[PRIMARY]GOIFEXISTS(SELECT*FROMdbo.Test1) EXEC('INSERTINTOdbo.Tmp_Test1(id,name) SELECTid,nameFROMdbo.Test1IT 例二 我们现在来把它弄得更复杂一点,在表里设置主键,然后创建以外键约束的另一个表,以第一个表
4、主键为索引。我们可以看到这样做需要花更多工夫。以下是引用片段:CREATETABLE[dbo].[Test1]( [id][int]IDENTITY(1,1)NOTNULL, [name][nchar](10)NULL,CONSTRAINT[PK_Test1]PRIMARYKEYCLUSTERED ( [id]ASC))GO CREATETABLE[dbo].[Test2]( [id][int]NULL, [name2][nchar](10)NULL)ON[PRIMARY]GO ALTERTABLE[dbo].[Test2]anagementStudi
5、o去掉表test1中id列的标识值,可以从脚本里看到,这样需要更多的步骤才能达到我们的目的。 首先创建一个列属性正确的临时表Tmp_Test1 把数据从表Test1移植到临时表Tmp_Test1中 去掉Test2的外键约束 删除表Test1 临时表Tmp_Test1重命名为Test1 在表Test1里创建主键 最后重新在表Test2里创建外键约束。步骤太多了!以下是引用片段:/*Topreventanypotentialdatalossissues,youshouldreviewthisscriptindetailbeforerunningi
6、toutsidethecontextofthedataba12下一页>>>>这篇文章来自..,。sedesigner.*/BEGINTRANSACTIONSETQUOTED_IDENTIFIERONSETARITHABORTONSETNUMERIC_ROUNDABORTOFFSETCONCAT_NULL_YIELDS_NULLONSETANSI_NULLSONSETANSI_PADDINGONSETANSI_ITBEGINTRANSACTIONGOCREATETABLEdbo.Tmp_Test1 ( idINTNOTNULL, nameNCHAR(10)N
7、ULL ) ON[PRIMARY]GOIFEXISTS(SELECT*FROMdbo.Test1) EXEC('INSERTINTOdbo.Tmp_Test1(id,name) SELECTid,nameFROMdbo.Test1ARYKEYCLUSTERED ( id )ARY] GOMITBEGINTRANSACTIONGOALTERTABLEdbo.Test2ADDCONSTRAINT FK_Test2_Test1FOREIGNKEY ( id )REFERENCESdbo.Test1 ( id )ONUPDATE NOACTION
8、 ONDELETE NOACTION GOMIT 同样,
此文档下载收益归作者所有