请问如何用脚本去掉某个字段的IDENTITY属性!!!
解决方案 »
- 删除某一数据库中所有SA用户创建的用户口
- 请教一个sql语句
- 标识列
- 为何多个终端通过TCP/IP连接上sqlserver进行数据操作的时候,服务器会被拖的超慢?而通过namepipes连却不会呢?
- 如何用SQL 语句把表里的一些内容替换掉?
- MySql 子查询问题
- 数据库更新问题
- 请教SQL高手
- 执行到updatetext t.col2就不行了,不知该如何写这个带binary(16)的动态sql
- 急啊,请哪位大虾知道,如何利用progressBar(进度条)来表示备份的进度.(用dmo编程)
- 请问一条简单的sql语句:如何查找以大写AB开头的纪录?
- SQL server 2000 简体中文版的数据库编码问题
@TableName sysname --要处理的表名
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),N'IsUserTable'),0)=0
BEGIN
RAISERROR('"%s" 必须是当前数据库中已经存在的用户表',12,16,@TableName)
RETURN
END--标识列转换处理检查
DECLARE @s nvarchar(1000),@FieldName sysname,@bkFieldName sysname,@sql nvarchar(4000)
SELECT @FieldName=QUOTENAME(c.name),
@bkFieldName=CAST(NEWID() as char(36)),
@s=@FieldName+N' '+QUOTENAME(t.name)
+CASE WHEN t.name LIKE '%int' THEN N''
ELSE N'('+CAST(c.prec as varchar)
+N','+CAST(c.scale as varchar)+N')'
END
FROM sysobjects o,syscolumns c,systypes t
WHERE o.name=@TableName
AND o.id=c.id
AND c.xusertype=t.xusertype
AND c.status=0x80
IF @@ROWCOUNT=0
BEGIN
RAISERROR(N'表 "%s" 中无标识列',1,16,@TableName)
RETURN
END--修改标识列名
SET @sql=QUOTENAME(@TableName)+N'.'+@FieldName
EXEC sp_rename @sql,@bkFieldName,N'COLUMN'--转换为标识列处理
SELECT @TableName=QUOTENAME(@TableName),
@bkFieldName=QUOTENAME(@bkFieldName)
EXEC('ALTER TABLE '+@TableName+N' ADD '+@s)
EXEC('UPDATE '+@TableName+N' SET '+@FieldName+N'='+@bkFieldName+N'
ALTER TABLE '+@TableName+N' DROP COLUMN '+@bkFieldName)
RAISERROR(N'表 "%s" 中的标识列 "%s" 已经转换为普通列',1,16,@TableName,@FieldName)
2.insert into 新表(id,...)
select * from 原表
3.drop table 原表
4.exec sp_rename '新表','原表'
CREATE TABLE dbo.Tmp_t1
(
a varchar(50) NULL,
b int NOT NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.t1)
EXEC('INSERT INTO dbo.Tmp_t1 (a, b)
SELECT a, b FROM dbo.t1 TABLOCKX')
GO
DROP TABLE dbo.t1
GO
EXECUTE sp_rename N'dbo.Tmp_t1', N't1', 'OBJECT'
GO
COMMIT
the IDENTITY column then change any referencing indexes, constraints, etc
and drop the old column.Alternatively, if you remove the IDENTITY property using Enterprise
Manager's table designer it will drop and re-create the table for you. Not
something you want to do while the system is in use though.