您的位置:首页 > 数据库

SQL学习----添加列到指定位置

2013-09-18 15:06 211 查看
--开启系统表写功能以便创建存储过程
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server 2005