解析如何用SQL語句在指定字段前面插入新的字段
更新時間:2013年06月11日 15:47:07 作者:
本篇文章是對如何用SQL語句在指定字段前面插入新的字段的方法進行了詳細的分析介紹,需要的朋友參考下
create proc addcolumn
@tablename varchar(30), --表名
@colname varchar(30), --要加的列名
@coltype varchar(100), --要加的列類型
@colid int --加到第幾列
as
declare @colid_max int
declare @sql varchar(1000) --動態(tài)sql語句
--------------------------------------------------
if not exists(select 1 from sysobjects
where name = @tablename and xtype = 'u')
begin
raiserror 20001 '沒有這個表'
return -1
end
--------------------------------------------------
if exists(select 1 from syscolumns
where id = object_id(@tablename) and name = @colname)
begin
raiserror 20002 '這個表已經(jīng)有這個列了!'
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 '加一個新列不成功,請檢查你的列類型是否正確'
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)
--將新列列號復位
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 '表名','新列名','新列類型',加到第幾個位置
如:
exec addcolumn 'test','id2','char(10)',2
表示將id2這個列加到表test的第二個位置,類型是char(10)。
@tablename varchar(30), --表名
@colname varchar(30), --要加的列名
@coltype varchar(100), --要加的列類型
@colid int --加到第幾列
as
declare @colid_max int
declare @sql varchar(1000) --動態(tài)sql語句
--------------------------------------------------
if not exists(select 1 from sysobjects
where name = @tablename and xtype = 'u')
begin
raiserror 20001 '沒有這個表'
return -1
end
--------------------------------------------------
if exists(select 1 from syscolumns
where id = object_id(@tablename) and name = @colname)
begin
raiserror 20002 '這個表已經(jīng)有這個列了!'
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 '加一個新列不成功,請檢查你的列類型是否正確'
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)
--將新列列號復位
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 '表名','新列名','新列類型',加到第幾個位置
如:
exec addcolumn 'test','id2','char(10)',2
表示將id2這個列加到表test的第二個位置,類型是char(10)。
相關(guān)文章
SQL?Server數(shù)據(jù)庫備份與還原完整操作案例
在開發(fā)與運維的過程中,數(shù)據(jù)的備份與還原是經(jīng)常用到的,下面這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫備份與還原的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07
基于Microsoft SQL Server實現(xiàn)編寫漢字轉(zhuǎn)拼音函數(shù)
在搜索應用中,我們一般會提供一個搜索框,輸入關(guān)健字,點擊查詢按鈕以獲取結(jié)果數(shù)據(jù),大部分情況我們會提供模糊查詢的形式以在一個或多個字段進行搜索以獲取結(jié)果,本文給大家就介紹了基于Microsoft SQL Server實現(xiàn)編寫漢字轉(zhuǎn)拼音函數(shù),需要的朋友可以參考下2024-03-03
一個完整的SQL SERVER數(shù)據(jù)庫全文索引的示例介紹
以下是介紹SQL SERVER數(shù)據(jù)庫全文索引的示例,以pubs數(shù)據(jù)庫為例。需要的朋友參考下2013-07-07
sqlserver 2000中創(chuàng)建用戶的圖文方法
今天網(wǎng)上有人問我,如何在sqlserver中新建一個用戶,因為不可能用sa登錄,這樣會帶來安全隱患。2012-03-03
MSSQL 刪除數(shù)據(jù)庫里某個用戶所有表里的數(shù)據(jù)
刪除數(shù)據(jù)庫里某個用戶所有表里的數(shù)據(jù)的實現(xiàn)語句。2009-09-09
sql server 復制表從一個數(shù)據(jù)庫到另一個數(shù)據(jù)庫
本文將詳細介紹SQL server 數(shù)據(jù)庫如何把一張表復制到另一個數(shù)據(jù)庫表中,需要了解更多的朋友可以參考下2012-11-11

