如何用SQL语句在指定字段前面插入新的字段?

如何用SQL语句在指定字段前面插入新的字段?

2007-10-17 09:28:00|  分类: 笔记|举报|字号 订阅

create proc addcolumn 
@tablename varchar(30), --表名 
@colname varchar(30), --要加的列名 
@coltype varchar(100), --要加的列类型 
@colid int --加到第几列 
as

declare @colid_max int 
declare @sql varchar(1000) --动态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 ‘这个表已经有这个列了!‘ 
return -1 
end 
-------------------------------------------------- 
--保证该表的colid是连续的 
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 ‘[email protected]+‘ add ‘[email protected]+‘ ‘[email protected] 
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 
-------------------------------------------------- 
--打开修改系统表的开关 
EXEC sp_configure ‘allow updates‘,1 RECONFIGURE WITH OVERRIDE

--将新列列号暂置为-1 
set @sql = ‘update syscolumns 
set colid = -1 
where id = object_id(‘‘‘[email protected]+‘‘‘) 
and colid = ‘+cast(@colid_max as varchar(10)) 
exec(@sql)

--将其他列的列号加1 
set @sql = ‘update syscolumns 
set colid = colid + 1 
where id = object_id(‘‘‘[email protected]+‘‘‘) 
and colid >= ‘+cast(@colid as varchar(10)) 
exec(@sql)

--将新列列号复位 
set @sql = ‘update syscolumns 
set colid = ‘+cast(@colid as varchar(10))+‘ 
where id = object_id(‘‘‘[email protected]+‘‘‘) 
and name = ‘‘‘[email protected] +‘‘‘‘ 
exec(@sql) 
-------------------------------------------------- 
--关闭修改系统表的开关 
EXEC sp_configure ‘allow updates‘,0 RECONFIGURE WITH OVERRIDE 
go

调用方法: 
exec addcolumn ‘表名‘,‘新列名‘,‘新列类型‘,加到第几个位置 
如: 
exec addcolumn ‘test‘,‘id2‘,‘char(10)‘,2 
表示将id2这个列加到表test的第二个位置,类型是char(10)。

------------------------------------------------------

上面的是纯SQL语句的实现方法。当然,也可以把需要修改后的字段顺序先select...into...到一个临时表,然后drop旧表,把临时表复制或者改名过来,也可以实现原来需要的功能。但是这样如果需要修改的表一多,就会给数据库带来很多日志,而且可能会丢掉原来的字段关系。所以还是要看情况选择使用。

时间: 2024-08-08 22:01:00

如何用SQL语句在指定字段前面插入新的字段?的相关文章

如何用SQL语句查询Excel数据?

如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOpenDataSource( 'Microsoft.ACE.OLEDB.12.0', 'Data Source="c:\book1.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet1$] 复制代码

Navicat for MySQL界面下如何用SQL语句创建表?

Navicat for MySQL界面下如何用SQL语句创建表?下面小编就告诉你.首先打开 Navicat,选择一个数据库,点击"查询",在右侧点击"创建查询",输入SQL语句,点击"执行"就可以了,示例SQL: CREATE TABLE `test`.`users` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` int(10) DEF

SQL INSERT INTO 语句:向表中插入新记录语法及案例剖析

SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录. SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录. SQL INSERT INTO 语法 INSERT INTO 语句可以有两种编写形式. 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可: INSERT INTO table_name VALUES (value1,value2,value3,...); 第二种形式需要指定列名及被插入的值: INSERT I

mysql如何用sql语句修改表字段?

1.今日任务根据下表用sql语句创建表结构 2.在创建上图表结构的时候,不小心把最后一个字段写成了全大写的STATUS,看着实在不协调,于是准备修改这个字段 3.修改的方法有很多种 1.我用的是mysql数据库,可以直接选择表,右键设计表,直接修改保存就ok 2.或者直接DROP TABLE 表把表删除,重新CREATE TABLE表来新建表 2.但是我需要的是用sql语句来修改,输入下图sql语句运行一下就修改成功了 注意:有的人看到这受影响的行数为0,就要问一句到底有没有修改成功,答案是有的

数据库SQL语句查询指定时间段内的数据

[摘要]有的时候,我们需要查询数据库某段时间之间的数据,比如2016年5月1号到到5月3号之间用户注册数量(特殊节假日期间)等.那么用SQL语句如何实现呢? 首先,数据表中的存时间的字段比如是addtime可能是时间戳(varchar),也可能是用timestamp类型表示,如果是时间戳格式当然好办,如果是timestamp格式:YYYY-MM-DD HH:II:SS这个格式,如2016-05-01 00:00:00这种格式的SQL语句怎么表示?有下面两张方式: (1)第一种方法,使用关键字be

批量执行SQL语句,进行删除,插入或者更改。

private bool ExecuteTransaction(List<string> list) { using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["LocalConnectionString"].ToString())) { SqlCommand command = new SqlCommand(); S

数据库SQL语句学习笔记(5)-创建计算字段

1.存储在表中的数据并不总是应用程序需要的,比如说我们有商品的单价,有售出商品的数量这两个列,但是我们为了打印发票,需要总价信息,即单价*商品.因此,我们需要直接从数据库中检索出转换,计算或格式化过的数据,而不是检索出数据.此时单价和数量是一般的表列,而总价就是计算出的字段. 字段:基本上与列的意思相同,经常互相使用,不过数据库列一般称为列. 只有数据库自己知道哪些列是列,哪些列是字段.应用程序并不能识别. USE sells; SELECT * FROM Vendors; 2. 拼接(conc

SQL语句生成指定范围内随机数

1.生成随机实型数据 create procedure awf_RandDouble @min dec(14,2), @max dec(14,2), @result dec(14,2) output as begin set @result= cast((rand()*(@[email protected])[email protected]) as dec(14,2)) return @result end 2.生成随机整型数据 create procedure awf_RandInt @mi

oracle用sql 语句如何向表中插入时间?

有关日期的操作中,更多的是涉及系统当前时间,用sysdate表示即可,如果是插入其他非系统时间的日期类型数据的话,用to_date转换再插入就可以了.例: 1 insert into 表(c_date) values(to_date('20120927 20:09:47','YYYYMMDD HH24:MI:SS')); 另外:有些日期字段中会有一些默认数据,所以to_date还是挺有用的.如: 1 startdate date DEFAULT to_date('2000-01-01','yyy