浏览 1695 次
锁定老帖子 主题:动态表
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-10
id 学校id 主键 自增 name 学校名称 表:学校完整信息表 xx2 id 学校完整信息表id 主键 自增 xx_id 学校id attr_id 属性id arrt_value 属性值 表:额外属性表 arrt arrt_id 属性id 主键 不自增 arrt_name 属性名称 视图 all_xx查看图片附件 添加记录 地址,电话,详细信息,校长名字,到额外属性表 arrt 下面是静态的sql语句: select name, max (case arrt_name when '地址' then arrt_value else '0' end) as '地址', max (case arrt_name when '电话' then arrt_value else '0' end) as '电话' from all_xx group by name 下面是动态的sql语句 DECLARE @Sql VARCHAR(8000) DECLARE @TypeName VARCHAR(10) SET @Sql = 'SELECT name' DECLARE curType CURSOR READ_ONLY FORWARD_ONLY FOR ( SELECT Distinct arrt_name FROM all_xx) OPEN curType FETCH NEXT FROM curType INTO @TypeName WHILE @@Fetch_Status = 0 BEGIN SET @Sql = @Sql + Char(13) + Char(10) + ', MAX(Case When arrt_name=''' + @TypeName + ''' Then arrt_value Else null End) AS ' + @TypeName FETCH NEXT FROM curType INTO @TypeName END CLOSE curType DEALLOCATE curType SET @Sql = @Sql + Char(13) + Char(10) + 'FROM all_xx GROUP BY name' PRINT @Sql Exec(@Sql) 运行效果看图片! 这样做的好处是: 当学校的属性变化多端,我们要做的是维护数据库,而不是去修改代码. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |