我写了一个非常复杂的t-sql查询(根据我的标准,因为我不是DBA),其中有一个更复杂的子查询,我抽象为标量函数来计算和检索单个值。直到我意识到我需要来自子查询/函数中的第二列的数据并且现在我被卡住了一切都运行良好。显然我可以将函数转换为proc以返回多个值(或者直接在主查询中声明子查询)但是如何将它们作为单独的列整齐地放入父选择查询中?
我知道我可以做一些笨重的事情,如连接(逗号分隔)结果或使用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 :(得分:0)
您可以将当前作为标量函数的内容转换为table-valued function,然后使用CROSS APPLY中的FROM clause运算符构建最终结果集。
您不能将存储过程组合到其他查询中,并且从UDF返回多个值(列)的唯一方法是使其成为表值(因此它返回结果集而不是单个标量值)