【发布时间】:2009-08-21 12:24:42
【问题描述】:
使用存储过程,我有一个相当复杂的 SQL 语句,它返回一个 COUNT 值作为伪列。在许多情况下,结果将为“null”。这会导致我的应用程序出现问题,所以我想知道是否可以从存储过程中默认将“null”返回为“0”?
谢谢。
更新
我需要将 ISNULL 应用于以下语句;
select recip_Chosen, recip_CampaignId) AS ChosenCount
from TBL_CAMPAIGNRECIPIENTS
WHERE recip_CampaignId = @campaign
group by recip_Chosen
应该是这样的;
select recip_Chosen, ISNULL(count(recip_CampaignId),0) AS ChosenCount
from TBL_CAMPAIGNRECIPIENTS
WHERE recip_CampaignId = @campaign
group by recip_Chosen
但是,这仍然会在 ChosenCount 列中返回空值。有什么想法吗?
更新
好的,所以上面的语句是一个更大的语句的一部分,如下所示。这是完整的存储过程,但不是表结构,因为它涉及多个表。我只需要“ChosenCount”返回“0”而不是 Null。 SP 确实为 TBL_CAMPAIGNS_CHARITIES 中对应于 TBL_CAMPAIGNS 的每条记录返回 1 行。
CREATE PROCEDURE web.getPublicCampaignData
(
@campaign BIGINT
)
AS
BEGIN
SELECT *
FROM TBL_CAMPAIGNS C
INNER JOIN TBL_MEMBERS M
ON C.campaign_MemberId = M.members_Id
INNER JOIN TBL_CAMPAIGNS_CHARITIES CC
ON C.campaign_Key = CC.camchar_CampaignID
INNER JOIN TBL_CHARITIES CH
ON CC.camchar_CharityID = CH.cha_Key
LEFT OUTER JOIN (
select recip_Chosen, count(recip_CampaignId) as ChosenCount
from TBL_CAMPAIGNRECIPIENTS
WHERE recip_CampaignId = @campaign
group by recip_Chosen
) CRC
on CH.cha_Key = CRC.recip_Chosen
WHERE C.campaign_Key = @campaign;
END
【问题讨论】:
-
如何将此 COUNT 列实现为“计数”NULL 而不是 0?
-
用完整的陈述更新了问题。
-
好吧,问题是:你在这里做一个左外连接,所以如果没有基于
on CH.cha_Key = CRC.recip_Chosen条件显示的数据,那么那里什么都没有。 LEFT OUTER JOIN 里面的 SELECT 根本不会被执行,所以这就是为什么 ISNULL 从来没有机会做它的工作 -
查看我更新的帖子 - 我试图展示如何重新订购您的 SProc 以使 ISNULL 为您工作
标签: sql sql-server sql-server-2005 stored-procedures