SQL Server 2000如何用SQL语句在在指定位置插入列
2007-06-27 23:56
429 查看
使用alter table可以在表中插入列,插入的列都是放在最后,但有的时候需要将列插入到其他列的前面,用企业管理器可以处理,如果用SQL脚本该如何做呢?
首先参考如下代码:
create table test (A char(10),C char(10),D char(10))
insert into test values ('Col A','Col C','Col D')
select * from test
--允许系统标更新
exec sp_configure 'allow updates','1'
go
reconfigure with override
go
--添加D列
alter table test add B int
--更新C,D列顺序
update syscolumns set colid=colid+1 where colid>=2 and id = object_id('test')
--更新B列顺序
update syscolumns set colid=2 where name='B' and id=object_id('test')
--禁用系统标更新
exec sp_configure 'allow updates','0'
go
reconfigure with override
go
select * from test
drop table test
但是此脚本有一个严重问题,如果表中已经有数据,那么插入列后数据会颠倒,即D列的数据没有了(NULL),而新加的B列有杂乱数据,看来此法不行,即便是空表也难说其他地方更改不到位,所以此法不能用。
后来在企业管理器中做了一个插入列的操作,然后“保存更改脚本”,发现系统的处理很简单,就是建一个新表Tmp_test,把旧表test的数据全部插入到新表中,然后删除test,把Tmp_test改名为test,代码如下:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_test
(
a char(10) NULL,
b char(10) NULL,
c char(10) NULL,
d char(10) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.test)
EXEC('INSERT INTO dbo.Tmp_test (a, c, d)
SELECT a, c, d FROM dbo.test (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.test
GO
EXECUTE sp_rename N'dbo.Tmp_test', N'test', 'OBJECT'
GO
COMMIT
首先参考如下代码:
create table test (A char(10),C char(10),D char(10))
insert into test values ('Col A','Col C','Col D')
select * from test
--允许系统标更新
exec sp_configure 'allow updates','1'
go
reconfigure with override
go
--添加D列
alter table test add B int
--更新C,D列顺序
update syscolumns set colid=colid+1 where colid>=2 and id = object_id('test')
--更新B列顺序
update syscolumns set colid=2 where name='B' and id=object_id('test')
--禁用系统标更新
exec sp_configure 'allow updates','0'
go
reconfigure with override
go
select * from test
drop table test
但是此脚本有一个严重问题,如果表中已经有数据,那么插入列后数据会颠倒,即D列的数据没有了(NULL),而新加的B列有杂乱数据,看来此法不行,即便是空表也难说其他地方更改不到位,所以此法不能用。
后来在企业管理器中做了一个插入列的操作,然后“保存更改脚本”,发现系统的处理很简单,就是建一个新表Tmp_test,把旧表test的数据全部插入到新表中,然后删除test,把Tmp_test改名为test,代码如下:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_test
(
a char(10) NULL,
b char(10) NULL,
c char(10) NULL,
d char(10) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.test)
EXEC('INSERT INTO dbo.Tmp_test (a, c, d)
SELECT a, c, d FROM dbo.test (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.test
GO
EXECUTE sp_rename N'dbo.Tmp_test', N'test', 'OBJECT'
GO
COMMIT
相关文章推荐
- SQL Server 2000如何用SQL语句在在指定位置插入列
- SQL Server 2000如何用SQL语句在在指定位置插入列
- 解析如何用SQL语句在指定字段前面插入新的字段
- SQL SERVER 2000用sql语句如何获得当前系统时间
- 如何用SQL语句在指定字段前面插入新的字段?
- 如何用SQL语句在指定字段前面插入新的字段?
- 【SQL精彩语句】SQL SERVER 2000中查询指定节点及其所有子节点的函数(表格形式显示)
- 学习在Sql Server中如何通过SQL语句创建Job
- 在Asp.Net中如何将从SQL读出来的表转化成XML文件并保存在指定的位置中
- SQL Server 2000/2005 分页SQL — 单条SQL语句
- 【SQL精彩语句】SQL SERVER 2005中查询指定节点及其所有子节点的方法(表格形式显示)
- Sql Server 2000 2005 用Sql语句生成Sqlserver数据字典
- 每次插入一条数据速度很慢,一次全部插入SQL语句过大,个人解决办法是每次插入指定条数
- SQL Server 2000/2005 分页SQL — 单条SQL语句
- SQL语句创建表并插入指定N条数据(用于测试)
- 如何在SQL Server 2008下轻松调试T-SQL语句和存储过程
- 怎样用SQL Server 2008 SQL语句将Excel数据导入到数据库里指定的表里面?(
- sql工具:一条sql语句,查询sql server某个指定表的所有列及其属性 .