SQL Server中为现有的列添加或去掉标识属性
2008-01-09 09:52:24 来源:WEB开发网问题:
SQL Server有一个不错的常用特性,就是标识列。利用这个特性,你可以轻松地在表里为每一行创建唯一的值。添加一个新的列并设置为标识列,或者删除现有标识列都很简单,但是如果是要把一个现有的列改为标识列,或者去掉现有的标识列的标识属性,那应该怎么做呢?
专家解答:
要做到这一步并不容易,或者说没有什么简单易行的方法。SQL Server的设计里并没有很简单的就现有的列加上或去掉标识属性的方法。最安全的办法是,创建一个新的列并设置为标识列,或者创建一个新的表,然后把数据移植进去。
我们来看看一些例子:
例一
现有一个简单的表,表里含有两列,其中一列为标识列。
CREATE TABLE [dbo].[Test1](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nchar](10) NULL
)
如果我们用SQL Server Management Studio来去掉”id”列的标识值,这样就会创建出一个新的临时表,原表的数据都移到了临时表中,然后删除原表并为新表重命名。我们可以从下面的脚本里看到这个过程。
要看到这个脚本,只要使用 Management Studio来进行改动,然后右击designer,选择"Generate Change Script"。
以下是引用片段:
/* 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
DROP TABLE dbo.Test1
GO
EXECUTE sp_rename N'dbo.Tmp_Test1', N'Test1', 'OBJECT'
GO
COMMIT
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
更多精彩
赞助商链接