【发布时间】:2010-12-12 05:41:06
【问题描述】:
假设我们有一个存储过程,它采用布尔值 @IsAllowed 参数,如果它通过 True 我应该从两个表中选择数据 A,B (我将在我的情况下使用 Union ALL )否则它通过了False 我应该从一张表中选择数据A ...我用以下方式写它:
Create PROCEDURE TestSP
(
@IsAllowed bit
)
AS
IF @IsAllowed = 1
BEGIN
Select ID, Username From A
Union ALL
Select ID, Username From B
END
ELSE
Select ID, Username From A
这是最好的方法吗?虽然在我的真实案例中,SP 在第一个查询的 where 条件中使用了大约 9 个参数,这意味着我将编写第一个查询两次并进行任何更改在其中我必须注意在 2 个不同的地方拥有相同的副本
【问题讨论】:
-
B是A的子集吗?还是来自一个表的两个不同的结果集? -
A 是一个在结构上与表 B 不同的表,但它具有我想要返回的相交列...我使用 sql server 2005
-
相交列?但是你没有加入他们;您将它们附加到结果集中。
标签: sql stored-procedures query-optimization