关于触发器和存储过程中的alter的提问

Kandy 2004-04-28 11:55:22
有一个表ITEM用来存储需要维护的项目
另一表onedetail用来存储具体的数据
因为需求方有时候需要增加或者修改删除需要维护的项目,也就确定了onedetail数据的列的不确定性,比如人事管理,包括工号,姓名,性别,民族列,如果他想再增加一个文化程度的列,我把列的信息都保存在ITEM中,想实现的是在ITEM表里每+一条数据的时候这条数据的ITEMNAME段里的内容给ONEDETAIL表作为一个列名+上
做如下触发
create trigger tr_add_up on item for insert
as

declare @col_add_name varchar(50)

select @col_add_name=itemname from inserted

alter table onedetail ADD @col_add_name varchar(50) NULL

提示@col_add_name出错,查看一本SQL SERVER6.5的手册提到触发器不能用alter,我用的SQL SERVER2000,后来把最后一句改成alter table onedetail ADD xddx varchar(50) NULL
运行正常,且在ITEM中+一条数据其数据ONEDETAIL表中就会添加名为XDDX的列
既然不支持ALTER怎么改了以后怎么会最后一句成功呢?
我又试了在存储过程中仍然是变量出错……
究竟存储过程中是不能调用ALTER的问题,还是我语句的问题?针对我说的情况如果不采用触发用什么其他的方法好呢?程序免谈……就是为了省事才用这些……
...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kandy 2004-04-28
  • 打赏
  • 举报
回复
两位答题时间相差太少……先来多得……嘻嘻……
zjcxc 2004-04-28
  • 打赏
  • 举报
回复
字段名不能用变量,这是最基本的问题,触发器中修改表结构是允许的(至少sql2000允许)
txlicenhe 2004-04-28
  • 打赏
  • 举报
回复
declare @col_add_name varchar(50)

select @col_add_name=itemname from inserted

exec('alter table onedetail ADD '+@col_add_name+' varchar(50) NULL')
zjcxc 2004-04-28
  • 打赏
  • 举报
回复
create trigger tr_add_up on item for insert
as

declare @col_add_name varchar(50)

select @col_add_name=itemname from inserted

exec('alter table onedetail ADD ['+@col_add_name+'] varchar(50) NULL')

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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