238.标识列转换为普通列

本文介绍了一个SQL存储过程,用于将指定表中的标识列转换为普通列,并提供了详细的SQL语句实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE PROC p_DropIDENTITY
@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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值