解析如何用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), --要加的列類(lèi)型
@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)檢查你的列類(lèi)型是否正確'
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 '表名','新列名','新列類(lèi)型',加到第幾個(gè)位置
如:
exec addcolumn 'test','id2','char(10)',2
表示將id2這個(gè)列加到表test的第二個(gè)位置,類(lèi)型是char(10)。
@tablename varchar(30), --表名
@colname varchar(30), --要加的列名
@coltype varchar(100), --要加的列類(lèi)型
@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)檢查你的列類(lèi)型是否正確'
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 '表名','新列名','新列類(lèi)型',加到第幾個(gè)位置
如:
exec addcolumn 'test','id2','char(10)',2
表示將id2這個(gè)列加到表test的第二個(gè)位置,類(lèi)型是char(10)。
相關(guān)文章
SQL?Server數(shù)據(jù)庫(kù)備份與還原完整操作案例
在開(kāi)發(fā)與運(yùn)維的過(guò)程中,數(shù)據(jù)的備份與還原是經(jīng)常用到的,下面這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫(kù)備份與還原的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
配置SQL Server2022遠(yuǎn)程訪問(wèn)的方法步驟
SQLServer為用戶(hù)提供了便捷的遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)的能力,使得數(shù)據(jù)的管理和操作更加高效和靈活,本文主要介紹了配置SQL Server2022遠(yuǎn)程訪問(wèn)的方法步驟,感興趣的可以了解一下2024-05-05
基于Microsoft SQL Server實(shí)現(xiàn)編寫(xiě)漢字轉(zhuǎn)拼音函數(shù)
在搜索應(yīng)用中,我們一般會(huì)提供一個(gè)搜索框,輸入關(guān)健字,點(diǎn)擊查詢(xún)按鈕以獲取結(jié)果數(shù)據(jù),大部分情況我們會(huì)提供模糊查詢(xún)的形式以在一個(gè)或多個(gè)字段進(jìn)行搜索以獲取結(jié)果,本文給大家就介紹了基于Microsoft SQL Server實(shí)現(xiàn)編寫(xiě)漢字轉(zhuǎn)拼音函數(shù),需要的朋友可以參考下2024-03-03
一個(gè)完整的SQL SERVER數(shù)據(jù)庫(kù)全文索引的示例介紹
以下是介紹SQL SERVER數(shù)據(jù)庫(kù)全文索引的示例,以pubs數(shù)據(jù)庫(kù)為例。需要的朋友參考下2013-07-07
sqlserver 2000中創(chuàng)建用戶(hù)的圖文方法
今天網(wǎng)上有人問(wèn)我,如何在sqlserver中新建一個(gè)用戶(hù),因?yàn)椴豢赡苡胹a登錄,這樣會(huì)帶來(lái)安全隱患。2012-03-03
MSSQL 刪除數(shù)據(jù)庫(kù)里某個(gè)用戶(hù)所有表里的數(shù)據(jù)
刪除數(shù)據(jù)庫(kù)里某個(gè)用戶(hù)所有表里的數(shù)據(jù)的實(shí)現(xiàn)語(yǔ)句。2009-09-09
sql server 復(fù)制表從一個(gè)數(shù)據(jù)庫(kù)到另一個(gè)數(shù)據(jù)庫(kù)
本文將詳細(xì)介紹SQL server 數(shù)據(jù)庫(kù)如何把一張表復(fù)制到另一個(gè)數(shù)據(jù)庫(kù)表中,需要了解更多的朋友可以參考下2012-11-11

