【发布时间】:2012-05-14 06:50:35
【问题描述】:
我搜索了很多,但仍然没有机会让子查询一次返回多个列。以下代码有效,但很糟糕:
SELECT
(SELECT Column1 FROM dbo.fnGetItemPath(ib.Id)) AS Col1,
(SELECT Column2 FROM dbo.fnGetItemPath(ib.Id)) AS Col2,
(SELECT Column3 FROM dbo.fnGetItemPath(ib.Id)) AS Col3
FROM ItemBase ib
我实际上不知道如何将 ib.Id 传递给函数并在不调用 fnGetItemPath 函数 3 次的情况下获取整个 Column1、Column2、Column3 列。
提前致谢
【问题讨论】:
-
你能贴出函数的代码吗?如果它是一个表值函数,那么它应该可以工作,
-
是的,它是一个表值函数。但是上面的 SQL 代码确实效率不高,因为它必须分别运行 3 次不同的函数,这是没有用的。我需要一种机制来运行一次函数以一次获取三列。有什么想法吗?
-
如果它是一个表值函数,那么你不必像上面那样做,你可以 SELECT * FROM dbo.fnGetItemPath(ib.Id))
-
另外,它看起来不是运行代码 3 次,而是每个 ID 运行 3 次。你不能写 fnGetItemPath() 来输出完整的解决方案吗?即去掉 WHERE id = 函数的一部分...
标签: sql-server-2008 tsql subquery