sql如何循环动态查询多个结构相同的表并最后把结果显示在一个表里

沈白白 2019-01-27 03:55:56
我是一个菜鸟,我现在在做一个根据分数查询学校的功能,每个学校是一个表,所有表的字段结构是一样,查询语句是SELECT * FROM 北京大学 WHERE 最低分 < '" + score + "' and 专业科类='" + zykl + "' and 年份='" + year2 + "',目前我只会用union,并且实现了功能,但是有两个问题,一是学校太多,几百个,用union的话代码太多了不显示,第二这样写就把代码写死了,所以我想请教大神们如何动态循环遍历所有表进行这个查询,万分感谢。
...全文
1506 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Apq001 2019-01-29
  • 打赏
  • 举报
回复
感觉你应该只弄一个表就行了,比你原来的表结构增加一列学校名称....
tangfuyou 2019-01-28
  • 打赏
  • 举报
回复
用视图的方法是最方便的了,因为表结构是一样的
吉普赛的歌 2019-01-28
  • 打赏
  • 举报
回复
引用 5 楼 沈白白 的回复:
[quote=引用 3 楼 吉普赛的歌 的回复:]
--先创建一个视图:
CREATE VIEW view_school_all
AS
SELECT * FROM [北京大学]
UNION ALL
SELECT * FROM [北京航空航天大学]
--余下的学校你自己补全
...

--查询就简单了:
SELECT * FROM view_school_all 
WHERE 最低分 < '" + score + "' 
	and 专业科类='" + zykl + "' 
	and 年份='" + year2 + "'
所以主要是创建几百个学校的视图比较麻烦, 可以用类似下面的语句来做到:
--以文本显示
SET NOCOUNT ON
SELECT 'CREATE VIEW view_school_all 
AS
'+replace(STUFF((SELECT ';SELECT * FROM '+t.[name] FROM sys.tables AS t WHERE t.name LIKE '%大学'
FOR XML PATH('')),1,1,''),';','
UNION ALL 
')
太感谢了,已成功[/quote] 能用就结贴吧, 结贴率高帮你的人更多。
沈白白 2019-01-28
  • 打赏
  • 举报
回复
引用 3 楼 吉普赛的歌 的回复:
--先创建一个视图:
CREATE VIEW view_school_all
AS
SELECT * FROM [北京大学]
UNION ALL
SELECT * FROM [北京航空航天大学]
--余下的学校你自己补全
...

--查询就简单了:
SELECT * FROM view_school_all
WHERE 最低分 < '" + score + "'
and 专业科类='" + zykl + "'
and 年份='" + year2 + "'


所以主要是创建几百个学校的视图比较麻烦, 可以用类似下面的语句来做到:
--以文本显示
SET NOCOUNT ON
SELECT 'CREATE VIEW view_school_all
AS
'+replace(STUFF((SELECT ';SELECT * FROM '+t.[name] FROM sys.tables AS t WHERE t.name LIKE '%大学'
FOR XML PATH('')),1,1,''),';','
UNION ALL
')


太感谢了,已成功
吉普赛的歌 2019-01-27
  • 打赏
  • 举报
回复
--先创建一个视图:
CREATE VIEW view_school_all
AS
SELECT * FROM [北京大学]
UNION ALL
SELECT * FROM [北京航空航天大学]
--余下的学校你自己补全
...

--查询就简单了:
SELECT * FROM view_school_all 
WHERE 最低分 < '" + score + "' 
	and 专业科类='" + zykl + "' 
	and 年份='" + year2 + "'
所以主要是创建几百个学校的视图比较麻烦, 可以用类似下面的语句来做到:
--以文本显示
SET NOCOUNT ON
SELECT 'CREATE VIEW view_school_all 
AS
'+replace(STUFF((SELECT ';SELECT * FROM '+t.[name] FROM sys.tables AS t WHERE t.name LIKE '%大学'
FOR XML PATH('')),1,1,''),';','
UNION ALL 
')
  • 打赏
  • 举报
回复
那先得有个 学校名词列表然后 才能得到这个拼接sql
沈白白 2019-01-27
  • 打赏
  • 举报
回复

22,300

社区成员

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

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