解析如何用SQL語(yǔ)句在指定字段前面插入新的字段
更新時(shí)間:2013年06月11日 15:47:07 作者:
本篇文章是對(duì)如何用SQL語(yǔ)句在指定字段前面插入新的字段的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
create proc addcolumn
@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語(yǔ)句
--------------------------------------------------
if not exists(select 1 from sysobjects
where name = @tablename and xtype = 'u')
begin
raiserror 20001 '沒(méi)有這個(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è)新列不成功,請(qǐng)檢查你的列類型是否正確'
return -1
end
--------------------------------------------------
--打開(kāi)修改系統(tǒng)表的開(kāi)關(guān)
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
--將新列列號(hào)暫置為-1
set @sql = 'update syscolumns
set colid = -1
where id = object_id('''+@tablename+''')
and colid = '+cast(@colid_max as varchar(10))
exec(@sql)
--將其他列的列號(hào)加1
set @sql = 'update syscolumns
set colid = colid + 1
where id = object_id('''+@tablename+''')
and colid >= '+cast(@colid as varchar(10))
exec(@sql)
--將新列列號(hào)復(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)表的開(kāi)關(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)。
@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語(yǔ)句
--------------------------------------------------
if not exists(select 1 from sysobjects
where name = @tablename and xtype = 'u')
begin
raiserror 20001 '沒(méi)有這個(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è)新列不成功,請(qǐng)檢查你的列類型是否正確'
return -1
end
--------------------------------------------------
--打開(kāi)修改系統(tǒng)表的開(kāi)關(guān)
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
--將新列列號(hào)暫置為-1
set @sql = 'update syscolumns
set colid = -1
where id = object_id('''+@tablename+''')
and colid = '+cast(@colid_max as varchar(10))
exec(@sql)
--將其他列的列號(hào)加1
set @sql = 'update syscolumns
set colid = colid + 1
where id = object_id('''+@tablename+''')
and colid >= '+cast(@colid as varchar(10))
exec(@sql)
--將新列列號(hào)復(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)表的開(kāi)關(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)。
相關(guān)文章
sqlserver中通過(guò)osql/ocmd批處理批量執(zhí)行sql文件的方法
上周在測(cè)試環(huán)境建了幾十張表,保存了.sql文件,準(zhǔn)備在正式環(huán)境重建的時(shí)候懶得一個(gè)個(gè)打開(kāi)建了,做一在網(wǎng)上搜尋了一下,果然有簡(jiǎn)單點(diǎn)的方法。2011-08-08SQL Server雙服務(wù)器架設(shè)并數(shù)據(jù)自動(dòng)同步教程
自編程序由單機(jī)版改為網(wǎng)絡(luò)版后,使用范圍迅速擴(kuò)大,如何保障數(shù)據(jù)庫(kù)萬(wàn)無(wú)一失成為一個(gè)重要解決的問(wèn)題于是想到架設(shè)雙服務(wù)器并數(shù)據(jù)自動(dòng)同步,詳細(xì)步驟如下2012-11-11安裝MSDE2000提示為了安全起見(jiàn),要求使用強(qiáng) SA 密碼的解決方法
今天下載了一個(gè)msde2000A,本想按照平時(shí)的安裝習(xí)慣,找到了setup.exe安裝程序,錯(cuò)誤提示彈出一個(gè)對(duì)話框:為了安全起見(jiàn),要求使用強(qiáng) SA 密碼。請(qǐng)使用SAPWD開(kāi)關(guān)提供同一密碼。有關(guān)詳細(xì)信息,請(qǐng)參閱自述文件。安裝程序?qū)⒘⒓赐顺?/div> 2013-08-08SQL Server 定時(shí)訪問(wèn)url激活數(shù)據(jù)同步示例
這篇文章主要介紹的是SQL Server 定時(shí)訪問(wèn)url激活數(shù)據(jù)同步的具體實(shí)現(xiàn),需要的朋友可以參考下2014-05-05SQL SERVER臨時(shí)表排序問(wèn)題的解決方法
這篇文章主要給大家介紹了關(guān)于SQL SERVER臨時(shí)表排序問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01動(dòng)態(tài)給表添加刪除字段并同時(shí)修改它的插入更新存儲(chǔ)過(guò)程
有一個(gè)表,用戶需要在后臺(tái)操作它,希望能對(duì)它動(dòng)態(tài)進(jìn)行添加刪除字段2011-11-11oracle 重置序列從指定數(shù)字開(kāi)始的方法詳解
本文將詳細(xì)介紹oracle 重置序列從指定數(shù)字開(kāi)始的方法,有需求的朋友可以參考2012-11-11最新評(píng)論