我有一个简单的存储过程,如下所示:
ALTER PROCEDURE [dbo].[spList_Report]
@id INT
AS
SET NOCOUNT ON
SELECT *
FROM
tblProducts as products
WHERE
product.intID = @id
我有2个用户表:MainUser和SubUser 两个表都有一个外键列productID,它与产品表intID的主键intID相关。他们都有一个列emailAddress。产品表还有一个位列isMainUser。
如何根据isMainUser值更新存储过程以返回列emailAddress?因此,如果值为true,则从MainUser表中选择电子邮件地址,如果为false,则从SubUser表中选择emailAddress。
例如,我想要的只是一个emailAddress列:
ALTER PROCEDURE [dbo].[spList_Report]
@id INT
AS
SET NOCOUNT ON
SELECT
products.*
, myUser.emailAddress
FROM
tblProducts as products
WHERE
product.intID = @id
答案 0 :(得分:3)
您遗漏了一些重要信息。我假设
Products
可以与UserProductID MainUser
结合使用
Products
可以与UserProductID SubUser
结合使用
SQL声明
SELECT products.*
, CASE WHEN isMainUser=1
THEN MainUser.emailAddress
ELSE SubUser.emailAddress
END
FROM tblProducts as products
LEFT OUTER JOIN MainUser mu ON mu.UserProductID = products.UserProductID
LEFT OUTER JOIN SubUser su ON su.UserProductID = products.UserProductID
WHERE product.intID = @id
请注意,使用SELECT *
被视为不良做法。 SELECT *
永远不应出现在生产代码中。
答案 1 :(得分:0)
在两个表上创建一个视图并加入到proc
中的表