[待解决问题] 如何实现让用户自己添加数据库字段
提问时间: 2008-03-10 15:48
悬赏分:30 该问题已到期 浏览:320 次
经常看到有些系统可以让用户自己定义数据库字段,然后自定义查询等功能,不知道有什么好的方法???
提问者:黄绍杰 - 初学一级
所有回答(6)
可以了解一些反射的知识~~.net 还可以在线编译代码 都是可以利用的手段. 不过对程序的设计水平要求较高.
2个月前   回答者:沙加 - 老鸟四级
通过sql获取数据表的信息
然后根据用户选择的字段拼接字符串就可以了吧
2个月前   回答者:Anders Cui - 小虾三级
我所了解的系统一般是先预留几个冗余字段,供用户自定义,并通过数据表记录字段的别名,供用户使用。
也可以在原表上通过sql语句增加字段,实现起来比较麻烦,而且如果用户要删除字段的话更是麻烦。
建议采用第一种方式。说的不对的地方请大家指教。
2个月前   回答者:iclotus - 菜鸟二级
这样的应用很必要吗?感觉可维护性不好啊。
2个月前   回答者:Howard Queen - 菜鸟二级
楼主说的叫做"行转列"
例如:
A表用来保存所有记录的列
B表是保存所有学生的记录
临时表#cc :保存A表与B表"笛卡尔集"
cc_temp:保存最终结果
A表中有记录与字段
id column value(varchar(30))
1 性别     ''
2 身高     ''
B表中有记录
id name
1 张三
2 李四
然后A表与B表"笛卡尔集"
SELECT b.*,a. column ,a.value into #cc  from A a ,B b
#CC结果:
id name column value
1 张三   性别    ''
1 张三   身高   ''
2 李四   性别   ''
2 李四   身高  ''
然后更新#cc中学生的相应信息
结果:
id name column value
1 张三   性别    男
1 张三   身高   170
2 李四   性别   男
2 李四   身高  170
然后#cc表进行"行转列"
  declare   @sql   varchar(8000)   
  set   @sql   =   'select   id,name'   
  select   @sql   =   @sql   +   ',max(case   column    when   '''+column +'''   then   value  end)   ['+column +']'   
  from   (select   distinct   column    from   #cc)   as   a   
  select   @sql   =   @sql+'into cc_temp   from   #cc group   by   id,name'   
 --print @sql
  exec(@sql) 

CC_temp记录:
id  name  性别  身高
1   张三   男    170
2  李四   男     170
-------------------------------完----
PS:这样就要可以完成楼主说的功能了,请用户选择A表中的列名,然后组合SQL语句查询目标表CC_TEMP就可以了~~~




2个月前   回答者:被偷De贼 - 菜鸟二级
@iclotus 
我见过几个也是通过冗余字段来处理的
2个月前   回答者:张荣华 - 小虾三级
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除