我有各种各样的相同的查询遍布我的项目,这是一个地狱维护。所以我想重新组织他们都在一个地方。我是新的数据库编程,所以请原谅我,如果我的想法是完全错误和荒谬的:D
我试过这样的方法:
CREATE OR ALTER FUNCTION GetResults
(
@Parameter1 int
)
RETURNS TABLE
AS
RETURN
(
WITH
Query1 AS (SELECT * FROM dbo.a WHERE ConditionsX),
Query2 AS (SELECT * FROM dbo.a WHERE ConditionsY),
Query3 AS (SELECT * FROM dbo.a WHERE ConditionsZ)
SELECT CASE
WHEN @Parameter1 = 1 THEN (SELECT * FROM Query1)
WHEN @Parameter1 = 2 THEN (SELECT * FROM Query2)
WHEN @Parameter1 = 3 THEN (SELECT * FROM Query3)
END
)
GO
可悲的是,我得到一个执行错误时,运行这是不是真的很清楚我:
如果未使用EXISTS引入子查询,则只能在选择列表中指定一个表达式。
1条答案
按热度按时间f4t66c6m1#
注解中提到,
CASE
返回一个标量值,所以它 * 不能 * 返回SELECT * FROM...
的结果,因为它(很可能)返回多个列 * 和 * 行;它不是一个标量值。更有可能的是,您应该做的是
UNION (ALL)
ing您的数据集,并在其中有一个WHERE
,所以只返回您感兴趣的:虽然这仍然有XY Problem的味道,如果我诚实的话,我怀疑你试图解决的问题和你给我们展示的问题不是一个相同的问题,尽管你需要问一个new question来问这个问题。