怎样加入新字段到指定顺序位置?

tripman 2004-07-12 04:16:49
要用SQL语句不是在企业管理器里!怎么写?
...全文
543 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
bflovesnow 2004-07-13
  • 打赏
  • 举报
回复
无聊,hehe
肥仔胧 2004-07-13
  • 打赏
  • 举报
回复
学习
flying310 2004-07-13
  • 打赏
  • 举报
回复
代码真的很经典,学习。
zhangzs8896 2004-07-13
  • 打赏
  • 举报
回复
老大真是太强了
hudan 2004-07-12
  • 打赏
  • 举报
回复
GOOD
zjcxc 元老 2004-07-12
  • 打赏
  • 举报
回复
--还是不偷懒,写成通用存储过程方便一点

--开启系统表写功能,不然无法创建存储过程
exec sp_configure 'allow updates',1 reconfigure with override
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_addfield]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_addfield]
GO

/*--在指定位置添加字段

添加字段到表中的指定位置
注意,字段定义必须符合 alter table add ...的规定
插入的位置从0开始,到字段数目-1结束
如果超过这个范围,则在表的尾部添加字段
一次只能添加一个字段,和 alter table 的限制完全一样

--邹建 2004.07--*/

/*--使用示例
--测试表
create table tb(a int)

--添加字段
exec p_addfield 'tb','id int',0 --在最前面添加字段
exec p_addfield 'tb','id1 int',0
exec p_addfield 'tb','id2 int',2 --在字段2前面添加字段

--显示添加结果
select * from tb

--删除测试
drop table tb
--*/
create proc p_addfield
@tbname sysname,
@fd_define nvarchar(1000), --字段定义(必须是合法的字段定义)
@colid int=-1 --添加位置:0--fieldcount-1,0表示在第一个字段前插入,-1或效的colid表示插入在最后
as
declare @s nvarchar(4000)

if isnull(objectproperty(object_id(@tbname),'IsUserTable'),0)=0
begin
select 错误='无效的表名'
return
end

--添加字段
set @s='alter table ['+replace(@tbname,']',']]')+'] add '+@fd_define
exec(@s)

--如果是添加在所有字段的未尾,则直接返回即可
if not exists(select 1 from syscolumns where id=object_id(@tbname) and colid between 1 and @colid+1)
return

--开启系统表写开关
exec sp_configure 'allow updates',1 reconfigure with override

set xact_abort on
begin tran
update syscolumns set colid=colid+1
where id=object_id(@tbname)
and colid>@colid

update syscolumns set colid=@colid+1
where id=object_id(@tbname)
and colid=(
select max(colid) from syscolumns
where id=object_id(@tbname))
commit tran

--关闭系统表写开关
exec sp_configure 'allow updates',0 reconfigure with override
go


--关闭系统表写功能
exec sp_configure 'allow updates',0 reconfigure with override
go
liuhealth 2004-07-12
  • 打赏
  • 举报
回复
mark,强的一踏
outwindows 2004-07-12
  • 打赏
  • 举报
回复
mark...
tripman 2004-07-12
  • 打赏
  • 举报
回复
强!
tripman 2004-07-12
  • 打赏
  • 举报
回复
回答是肯定的!
zjcxc 元老 2004-07-12
  • 打赏
  • 举报
回复
--如果很有必要的话:

--在指定字段后插入字段

exec sp_configure 'allow updates',1 reconfigure with override
go

alter table 表 add id int --添加字段
go

--处理字段位置
declare @colid int
select @colid=colid from syscolumns
where id=object_id('你要修改的表名') and name='字段名' --在该字段后插入

if @colid is null set @colid=1
update syscolumns set colid=colid+1
where id=object_id('你要修改的表名') and colid>@colid

update syscolumns set colid=@colid+1
where id=object_id('你要修改的表名') and colid=(
select max(colid) from syscolumns
where id=object_id('你要修改的表名'))
go
exec sp_configure 'allow updates',0 reconfigure with override

tripman 2004-07-12
  • 打赏
  • 举报
回复
这个问题邹建也不会吗?
zjcxc 元老 2004-07-12
  • 打赏
  • 举报
回复
首先确定有没有必要?
bflovesnow 2004-07-12
  • 打赏
  • 举报
回复
用 EM 来改吧,DDL 似乎做不到呢
xinliangyu 2004-07-12
  • 打赏
  • 举报
回复
感同身受, 共表关注。
tripman 2004-07-12
  • 打赏
  • 举报
回复
顺序没有用就不会来问了,正是工作中碰到这个问题
tripman 2004-07-12
  • 打赏
  • 举报
回复
批量修改表的时候就很有用,你总不可能一个一个去手工修改吧?
tripman 2004-07-12
  • 打赏
  • 举报
回复
syscolumns中有个colorder,还有个colid,但update了这两个字段,其他字段的顺序也应该相应改变
skyboy0720 2004-07-12
  • 打赏
  • 举报
回复
添加字段不难,难的是它要求顺序,一般语句添加的字段
都是显示在最后面的,我个人觉得顺序没有啥作用!
pjjia 2004-07-12
  • 打赏
  • 举报
回复
1、在你想加列的表中,在你想插入的那列点击鼠标右键选择插入列
2、可以在你的表中的最后加入一列,然后选择此列拖动到你想加入列的前面。
加载更多回复(7)

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧