具有多个选择的T-SQL存储过程

时间:2010-11-12 10:05:39

标签: tsql stored-procedures

我正在尝试在.NET应用程序中生成Winforms报告。我们的用户希望了解特定焊工在两个日期之间进行的焊接类型。用户还需要证明此焊接已完成。前端很简单,但我在如何获取数据方面苦苦挣扎。

我在存储过程中有以下SQL查询:

INPUT参数:@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

如何创建一个存储过程,返回一个包含这两个查询组合的表?我无法组合查询,因为distinct不起作用并返回多个wi_wpsnumbers相同。我正在查看临时表,但后来我不明白如何将这些查询的结果插入同一行。谢谢你的帮助

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

2 个答案:

答案 0 :(得分:3)

您可以从SP返回两个结果集 只需调用两个SELECT并在客户端代码中使用NextResult,在读完第一个结果集后检索第二个结果集。

答案 1 :(得分:0)

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

x.*为您提供xtabley.*的全部内容,ytable