2010-11-12 86 views
0

我想在我的.NET应用程序中生成一个Winforms报告。我们的用户希望知道特定焊工在两个日期之间完成的焊接类型。用户还需要证明此焊接已完成。前端很简单,但我在如何获取数据上挣扎。T-SQL有多个选择的存储过程

我有一个存储过程,下面的SQL查询:

输入参数:@WelderNo INT, @StartDate DATETIME, @EndDate DATETIME

SELECT DISTINCT wi.wi_wpsnumbers 
FROM wi_weld_instance wi 
INNER JOIN wlds_weld_section ws ON wi.weldinstanceid = ws.weldinstanceid 
INNER JOIN erd_employee_resourcedetails e ON e.employeeid = ws.employeeid 
WHERE (wi.wi_completiondate Between @StartDate AND @EndDate) 
AND e.erd_welderno in (@WelderNo) 

现在我想在返回每个不同wi_wpsnumbers其他的一些信息。这证明焊接已经完成。查询会是这个样子:

输入参数:@WelderNo INT, @StartDate DATETIME, @EndDate DATETIME, @wi_wpsnumber NVARCHAR(MAX)

SELECT TOP(1) e.fabemployeename, 
    erd_welderno, 
    (pm.PM_Number), 
    (mm.mm_assemblymark), 
    (wd.wd_number), 
    (wd.wd_length), 
    (wi.wi_completiondate) 
FROM wi_weld_instance wi 
INNER JOIN wlds_weld_section ws ON wi.weldinstanceid = ws.weldinstanceid 
INNER JOIN erd_employee_resourcedetails e ON e.employeeid = ws.employeeid 
INNER JOIN wd_weld_definition wd ON wd.welddefinitionid = wi.welddefinitionid 
INNER JOIN pm_project_map pm ON pm.projectmapid = wd.projectid 
INNER JOIN mm_mark_map mm ON wd.assemblyid = mm.markmapid 
WHERE (wi.wi_completiondate Between @StartDate AND @EndDate) 
    AND e.erd_welderno in (@WelderNo) AND wi.wi_wpsnumbers = @wi_wpsnumber 

如何创建一个存储过程返回一个表,这两个查询的组合?我无法将这些查询合并为一个独立的函数,并且返回多个相同的wi_wpsnumber。我正在查看临时表,但是我不明白如何将这些查询的结果插入同一行。感谢您的帮助

链接到数据库图表:http://i1215.photobucket.com/albums/cc510/gazamatazzer/DatabaseDiagram.jpg

+0

一些表格布局将是有益的;-) – 2010-11-12 10:07:38

+0

数据库图表链接添加:) – gazamatazzer 2010-11-12 10:35:04

回答

3

您可以从SP返回两个结果。
只需调用两个选择和使用NextResult在客户端代码来检索第二个结果您已经阅读后的第一个。

0
select x.*, y.* from 
(select * from xtable) x, (select * from ytable) y 

哪里x.*给你所有的xtabley.*给所有从ytable

+0

这工作,但删除了我想要的独特性质。 – gazamatazzer 2010-11-12 10:34:33