240.添加列到指定位置

本文介绍了一个SQL Server存储过程的示例,该存储过程用于向指定表中添加新的列,并允许指定列的位置。文章详细展示了如何启用系统表写功能、创建存储过程以及在完成后禁用写功能。

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

--开启系统表写功能以便创建存储过程
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE
GO

CREATE PROC sp_addColumn
@TableName sysname,              --要添加字段的表名
@FieldDefine nvarchar(1000),   --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范
@Position   int=-1                --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列,
                                        如果@Position无效,则仅添加列
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0
BEGIN
	RAISERROR(N'无效的表名 "%s"',12,16,@TableName)
	return
END

--添加字段
DECLARE @s nvarchar(4000)
SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefine

BEGIN TRAN
	EXEC sp_executesql @s
	IF @@ERROR=0
	BEGIN
		DECLARE @maxcolid int
		SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid) 
		FROM syscolumns
		WHERE id=OBJECT_ID(@TableName)
		IF @Position>0 AND @Position<@maxcolid
			UPDATE syscolumns SET 
				colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END,
				colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END
			WHERE id=OBJECT_ID(@TableName)
				AND colid>=@Position
		COMMIT TRAN
	END
	ELSE
		ROLLBACK TRAN
GO

--关闭系统表写功能
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值