2013-06-19 164 views
0

我正在创建一个存储过程,该存储过程中有多个select查询,我想将所有这些查询的结果作为一个数据集返回,以便我可以将它们放入一个阵列。从存储过程中获取多个SELECT语句的结果

但从我写我的存储过程只返回第一个查询的结果,而不是其余。

CREATE PROCEDURE getPost 
AS 
SET NOCOUNT ON 
SELECT TOP 5 title,summary,cphoto,pId FROM [post] WHERE [status]=1 order by dtetme DESC; 
SELECT TOP 1 title,summary,cphoto,pId FROM [post] WHERE [status]=1 order by dtetme DESC; 
SELECT TOP 1 title,summary,cphoto,pId FROM [post] WHERE [status]=1 order by [hits] DESC; 
SELECT TOP 5 title,summary,cphoto,pId FROM [post] WHERE [status]=1 AND category=(SELECT id FROM category where name='Small') order by dtetme DESC; 
SELECT TOP 5 title,summary,cphoto,pId FROM [post] WHERE [status]=1 AND category=(SELECT id FROM category where name=’Medium’) order by dtetme DESC; 
SELECT TOP 1 title,summary,cphoto,pId FROM [post] WHERE [status]=1 AND category=(SELECT id FROM category where name='Big’) order by dtetme DESC; 
SELECT TOP 3 title,summary,cphoto,pId FROM [post] WHERE [status]=1 order by newid(); 
GO 

我正在使用MS SQL Server。 请帮助!

回答

1

你可以放置一个UNIONSELECT

CREATE PROCEDURE getPost 
AS 
SET NOCOUNT ON 
SELECT TOP 5 title,summary,cphoto,pId FROM [post] WHERE [status]=1 order by dtetme  DESC 
UNION 
SELECT TOP 1 title,summary,cphoto,pId FROM [post] WHERE [status]=1 order by dtetme DESC 
UNION 
SELECT TOP 1 title,summary,cphoto,pId FROM [post] WHERE [status]=1 order by [hits] DESC 
UNION 
SELECT TOP 5 title,summary,cphoto,pId FROM [post] WHERE [status]=1 AND category=(SELECT id FROM category where name='Small') order by dtetme DESC 
UNION 
SELECT TOP 5 title,summary,cphoto,pId FROM [post] WHERE [status]=1 AND category=(SELECT id FROM category where name=’Medium’) order by dtetme DESC 
UNION 
SELECT TOP 1 title,summary,cphoto,pId FROM [post] WHERE [status]=1 AND category=(SELECT id FROM category where name='Big’) order by dtetme DESC 
UNION 
SELECT TOP 3 title,summary,cphoto,pId FROM [post] WHERE [status]=1 order by newid(); 
GO 

之间的每个

请注意,如果你使用 UNION,你不会得到任何重复和您的查询可能会慢一些在大数据集上。如果您使用 UNION ALL而不是您可能会重复,但查询将更快。

1

联合在一起

SELECT TOP 5 title,summary,cphoto,pId FROM [post] WHERE [status]=1 
UNION ALL 
SELECT TOP 1 title,summary,cphoto,pId FROM [post] WHERE [status]=1 
UNION ALL 
... 
order by title DESC; 
相关问题