存储过程不应该返回所有行。怎么了?

时间:2010-12-13 10:14:29

标签: c# asp.net sql-server

在Ques Table中,一些早期添加的行将AdminLangID列的值设置为NULL。以下SP也应返回这些行,但事实并非如此。怎么了?我需要添加什么条件才能返回 ALL 行?我只是手动设置某些行的AdminLangID,然后它将返回那些,但不是AdminLangID为NULL的那些。我希望它也能返回那些行。我需要改变什么?此SP已用于绑定页面上的网格,并且网格仅呈现AdminLangeID为NOT NULL的行。

BEGIN
 IF @QuesID = 0
  SET @QuesID =NULL
SELECT     FQ.QuesID, FQ.Ques,QuesAns
FROM         Admin.Ques FQ

INNER JOIN Admin.Lang AL ON AL.AdminLangID=FQ.AdminLangID
WHERE   FQ.QuesID = Coalesce(@QuesID,QuesID)
END

1 个答案:

答案 0 :(得分:2)

  

我只是手动设置某些行的AdminLangID,然后它返回那些但不是AdminLangID为NULL的那些。

Admin.Lang的内部联接意味着查询将仅返回已填写AdminLangID的行。将其更改为外部联接以使其返回具有null AdminLangID的行:

ALTER PROC [Schema2].[GetQues]    
(
 @QuesID int
 )
AS
BEGIN
 IF @QuesID = 0
  SET @QuesID =NULL
SELECT     FQ.QuesID, FQ.Ques,QuesAns as QuesAns,FQ.QuesAns[Answers], FQT.QuesType ,FQ.QuesTypeID, FQ.QuesParentID, FQ.Active, FQ.AdminLangID,AL.TelerikLang, AL.LangID
FROM         Admin.Ques FQ
LEFT OUTER JOIN Admin.QuesTypes FQT ON FQT.QuesTypeID=FQ.QuesTypeID
LEFT OUTER JOIN Admin.Lang AL ON AL.AdminLangID=FQ.AdminLangID
WHERE   FQ.QuesID = Coalesce(@QuesID,QuesID)
END