动态表 博客分类: 数据库 SQL
程序员文章站
2024-02-20 20:45:34
...
表:学校 xx
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)
运行效果看图片!
这样做的好处是:
当学校的属性变化多端,我们要做的是维护数据库,而不是去修改代码.
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)
运行效果看图片!
这样做的好处是:
当学校的属性变化多端,我们要做的是维护数据库,而不是去修改代码.
上一篇: 判断一个对象是否为空
下一篇: js解构赋值