解析如何用SQL語句在指定字段前面插入新的字段
發(fā)布日期:2022-01-02 05:38 | 文章來源:腳本之家
@tablename varchar(30), --表名
@colname varchar(30), --要加的列名
@coltype varchar(100), --要加的列類型
@colid int --加到第幾列
as declare @colid_max int
declare @sql varchar(1000) --動(dòng)態(tài)sql語句
--------------------------------------------------
if not exists(select 1 from sysobjects
where name = @tablename and xtype = 'u')
begin
raiserror 20001 '沒有這個(gè)表'
return -1
end
--------------------------------------------------
if exists(select 1 from syscolumns
where id = object_id(@tablename) and name = @colname)
begin
raiserror 20002 '這個(gè)表已經(jīng)有這個(gè)列了!'
return -1
end
--------------------------------------------------
--保證該表的colid是連續(xù)的
select @colid_max = max(colid) from syscolumns where id=object_id(@tablename) if @colid > @colid_max or @colid < 1
set @colid = @colid + 1
--------------------------------------------------
set @sql = 'alter table '+@tablename+' add '+@colname+' '+@coltype
exec(@sql) select @colid_max = colid
from syscolumns where id = object_id(@tablename) and name = @colname
if @@rowcount <> 1
begin
raiserror 20003 '加一個(gè)新列不成功,請檢查你的列類型是否正確'
return -1
end
--------------------------------------------------
--打開修改系統(tǒng)表的開關(guān)
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE --將新列列號暫置為-1
set @sql = 'update syscolumns
set colid = -1
where id = object_id('''+@tablename+''')
and colid = '+cast(@colid_max as varchar(10))
exec(@sql) --將其他列的列號加1
set @sql = 'update syscolumns
set colid = colid + 1
where id = object_id('''+@tablename+''')
and colid >= '+cast(@colid as varchar(10))
exec(@sql) --將新列列號復(fù)位
set @sql = 'update syscolumns
set colid = '+cast(@colid as varchar(10))+'
where id = object_id('''+@tablename+''')
and name = '''+@colname +''''
exec(@sql)
--------------------------------------------------
--關(guān)閉修改系統(tǒng)表的開關(guān)
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
go 調(diào)用方法:
exec addcolumn '表名','新列名','新列類型',加到第幾個(gè)位置
如:
exec addcolumn 'test','id2','char(10)',2
表示將id2這個(gè)列加到表test的第二個(gè)位置,類型是char(10)。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章