日期:2014-05-18  浏览次数:20897 次

求助SQL语句:增加一个字段到特定的位置!
create table a (a varchar(1) null,c varchar(1) null);
怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!

------解决方案--------------------
SQL可以实现添加列到指定位置


SQL code

--开启系统表写功能以便创建存储过程
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