2011-04-27 64 views
1

我写了一个相当复杂的t-sql查询(按我的标准,因为我不是DBA)更复杂的子查询,我抽象为一个标量函数来计算和检索单个值。这一切都运行良好,直到我意识到我需要来自子查询/函数中的第二列的数据,现在我被卡住了。很明显,我可以将函数转换为一个proc来返回多个值(或者直接在主查询中声明子查询),但是如何将它们整齐地放入父查询中作为单独的列?t-sql在子查询中使用具有子查询/ proc调用的2个或多个列的select查询

我知道我可以做一些笨重的事情,如concatenate(逗号分隔)结果或使用FOR XML(我的查询包含另一个子查询,从另一个表中返回* .. 1数据),但我我正在使用实体框架,并希望保持这两个强类型的特定值。我的谷歌搜索一直使用EXISTS,但是我没有看到任何实例从select查询中实际检索列的示例,即它仅用于将逻辑应用于使用多列的where子句。

这只是不能做的事情吗?我最后的手段是尝试将子查询合并为更多连接,但我试图保持我的查询可读,并将它们组合起来将这个想法抛出窗口。

在此先感谢 - “不,这不能做”也是回答我准备接受:-)

这是一个使用这我想换到一个标量函数“小说”的例子存储过程返回2列:

SELECT t1.Field1, 
     t2.Field2, 
     ,dbo.fn_Select_ComplexStuff(t1.Field3) AS ComplexStuff 
FROM MyTable1 AS t1 
INNER JOIN MyTable2 AS t2 ON t1.id = t2.id 
WHERE t1.Field4 = 'Albatross' 

回答

0

你会转换你目前有一个标量函数为table-valued function,然后使用CROSS APPLY运营商在FROM clause建立你的最终结果集。

您不能将存储过程组合到其他查询中,并且从UDF返回多个值(列)的唯一方法是使其为表值(因此它返回结果集而不是单个标量值)。

+0

很容易当你知道如何!非常感谢您的回复,它的工作原理是:-) – Rob 2011-04-28 07:46:20