The stored procedure:
ALTER PROC [Admin].[sp_Ques]
(
@QuesID bigint
)
AS
BEGIN
IF @QuesID = 0
SET @QuesID =NULL
SELECT FQ.QuesID, FQ.Ques,QuesAns
F
The scope of FQ is limited to the first select statement.
Your options include:
Perhaps create a local variable to hold the LanguageID that's being retrieved. Assign a value to it during the previous SELECT
. The addition of TOP 1
simply ensures that if/when you ever have multiple matches in the first query (indeed you will when @Ques
is zero or null!), only one value is returned in that query, thereby allowing a single value into your variable.
DECLARE @Lang int --whatever datatype your QuesID is.
SELECT TOP 1
FQ.QuesID, FQ.Ques,QuesAns as QuesAns,
FQ.QuesAns[Answers], FQT.QuesType ,
FQ.QuesTypeID, FQ.QuesParentID, FQ.Active, FQ.AdminLanguageID
,@Lang = FQ.AdminLanguageID
FROM Admin.Ques FQ
LEFT OUTER JOIN Admin.QuesTypes FQT ON FQT.QuesTypeID=FQ.QuesTypeID
WHERE FQ.QuesID = Coalesce(@QuesID,QuesID)
SELECT TelerikLanguage FROM Admin.Language
WHERE AdminLanguageID=@Lang
Why not just join them into 1 select?
ALTER PROC [Admin].[sp_Ques]
(
@QuesID bigint
)
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.AdminLanguageID, AL.TelerikLanguage
FROM Admin.Ques FQ
LEFT OUTER JOIN Admin.QuesTypes FQT ON FQT.QuesTypeID=FQ.QuesTypeID
LEFT JOIN Admin.Language AL ON AL.AdminLanguageID=FQ.AdminLanguageID
WHERE FQ.QuesID = QuesID OR @QuesID IS NULL
END