【发布时间】:2012-10-28 18:08:48
【问题描述】:
我在 SQL Server (DWH) 中写下一个视图,用例伪代码是:
-- Do some calculation and generate #Temp1
-- ... contains other selects
-- Select statement 1
SELECT * FROM Foo
JOIN #Temp1 tmp on tmp.ID = Foo.ID
WHERE Foo.Deleted = 1
-- Do some calculation and generate #Temp2
-- ... contains other selects
-- Select statement 2
SELECT * FROM Foo
JOIN #Temp2 tmp on tmp.ID = Foo.ID
WHERE Foo.Deleted = 1
视图的结果应该是:
Select Statement 1
UNION
Select Statement 2
预期的行为与 C# 中的 yield return 相同。有没有办法告诉视图哪些SELECT 语句实际上是结果的一部分,哪些不是?因为在我需要之前的小计算也包含选择。
谢谢!
【问题讨论】:
-
一个视图由一个 single SELECT 语句组成。您实际上是指存储过程而不是视图吗?
-
不正确,您可以在视图和存储过程中执行相同的代码。只要你使用 UNION、EXCEPT、INTERSECT 等。你可以使用多个 SELECT
-
是的,但我的意思是在更广泛的意义上,即包含一个带有 UNION 等的 SELECT 语句。 (顺便说一句,这仍然会构成一个单个 SQL 语句。)让我感到困惑(并首先让我发表评论)是这句话:
Is there a way to tell the view which SELECT statements are actually part of the result and which are not?。所以我想我会澄清这一点。 -
好吧,正确的做法应该是正确的进入存储过程。除非出于安全考虑,最终用户具有受限的 db_reader 角色,只能访问视图。
标签: sql sql-server view yield