如何---通过表中一个字段的内容来决定和自己连接的表 目的表名作为变量,通过单项ID找到比赛结果评分类型+成绩表取得然后用动态SQL语句添加 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 jianli2004的意思是将成绩表的表名放在体育单项比赛表的比赛结果评分类型字段中 类似这样select * from 体育比赛单项表 d join 体育比赛成绩表 c on d.单项ID=c.单项ID join 时间型成绩表 s on c.成绩ID=s.成绩ID where 比赛结果评分类型='时间型' --下面是处理方法示例--测试的表create table 体育比赛单项表(单项ID varchar(3),人员性别 varchar(4),单项名称 varchar(20),比赛结果评分类型 varchar(10))insert into 体育比赛单项表select '001','男子','100m短跑','时间型'union all select '002','女子','乒乓球','回合比分型'create table 体育比赛成绩表(成绩ID varchar(3),国家ID varchar(3),个人姓名 varchar(10),单项ID varchar(3))--insert into 体育比赛成绩表--select '023','CNH','王五','001'--union all select '024','USA','史密斯','002'create table 时间型成绩表(成绩ID varchar(3),用时 varchar(10))--insert into 时间型成绩表--select '023','10s'create table 回合比分型成绩表(成绩ID varchar(3),回合1得分 int,回合2得分 int,回合3得分 int)--insert into 回合比分型成绩表--select '024',11,10,7go--添加成绩的存储过程create proc p_savedata@成绩ID varchar(3),@国家ID varchar(3),@个人姓名 varchar(10),@单项ID varchar(3),@成绩列表 varchar(8000) --对于时间型成绩,直接传递,对于回合型,各成绩用,分隔asdeclare @s varchar(8000)--根据单项ID类型生成数据插入语句select @s='insert into ['+比赛结果评分类型+'成绩表] values('''+@成绩ID +''','''+replace(@成绩列表,',',''',''')+''')'from 体育比赛单项表 where 单项ID=@单项ID--插入数据到比赛成绩表insert into 体育比赛成绩表(成绩ID,国家ID,个人姓名,单项ID)values(@成绩ID,@国家ID,@个人姓名,@单项ID)exec(@s)go--调用示例exec p_savedata '023','CNH','王五','001','10s'exec p_savedata '024','USA','史密斯','002','11,10,7'go--显示处理结果select * from 体育比赛成绩表select * from 时间型成绩表select * from 回合比分型成绩表go--删除测试drop table 体育比赛单项表,体育比赛成绩表,时间型成绩表,回合比分型成绩表drop proc p_savedata 老邹,这里给你的分不多,其余的在下面给你吧。http://expert.csdn.net/Expert/topic/2657/2657410.xml?temp=.6499292 SQL 查询增加分组序号的问题 两数据量稍大的表关联,如何提效 我的困惑 对索引还是比较模糊,发帖请教如何提高这条语句查询速度! 初学者,问个傻问题,进来看看。 如果数据库的主文件被删或被破坏,我可不可以通过日志文件来恢复,在线等待 求助!!!!!!!!!!! SQL sever 無法正常啟動,請高手幫忙 INSTEAD OF INSERT 触发器有什么用啊 急........ Sql server 的分布式事务处理 求一条SQL语句!! 请问如何做一个视频数据库?
select * from 体育比赛单项表 d join 体育比赛成绩表 c on d.单项ID=c.单项ID join 时间型成绩表 s on c.成绩ID=s.成绩ID where 比赛结果评分类型='时间型'
create table 体育比赛单项表(单项ID varchar(3),人员性别 varchar(4),单项名称 varchar(20),比赛结果评分类型 varchar(10))
insert into 体育比赛单项表
select '001','男子','100m短跑','时间型'
union all select '002','女子','乒乓球','回合比分型'create table 体育比赛成绩表(成绩ID varchar(3),国家ID varchar(3),个人姓名 varchar(10),单项ID varchar(3))
--insert into 体育比赛成绩表
--select '023','CNH','王五','001'
--union all select '024','USA','史密斯','002'create table 时间型成绩表(成绩ID varchar(3),用时 varchar(10))
--insert into 时间型成绩表
--select '023','10s'create table 回合比分型成绩表(成绩ID varchar(3),回合1得分 int,回合2得分 int,回合3得分 int)
--insert into 回合比分型成绩表
--select '024',11,10,7
go--添加成绩的存储过程
create proc p_savedata
@成绩ID varchar(3),
@国家ID varchar(3),
@个人姓名 varchar(10),
@单项ID varchar(3),
@成绩列表 varchar(8000) --对于时间型成绩,直接传递,对于回合型,各成绩用,分隔
as
declare @s varchar(8000)--根据单项ID类型生成数据插入语句
select @s='insert into ['+比赛结果评分类型+'成绩表] values('''+@成绩ID
+''','''+replace(@成绩列表,',',''',''')+''')'
from 体育比赛单项表 where 单项ID=@单项ID--插入数据到比赛成绩表
insert into 体育比赛成绩表(成绩ID,国家ID,个人姓名,单项ID)
values(@成绩ID,@国家ID,@个人姓名,@单项ID)
exec(@s)
go--调用示例
exec p_savedata '023','CNH','王五','001','10s'
exec p_savedata '024','USA','史密斯','002','11,10,7'
go--显示处理结果
select * from 体育比赛成绩表
select * from 时间型成绩表
select * from 回合比分型成绩表
go--删除测试
drop table 体育比赛单项表,体育比赛成绩表,时间型成绩表,回合比分型成绩表
drop proc p_savedata