2010-12-04 7 views
0

ストアドプロシージャとが必要です私はこれを書きました: -は、いくつかのストアドプロシージャ

LanguageID=FQ.LanguageID 

明らかに動作しませんでした。マルチパート識別子「FQ.LanguageID」をバインドできませんでした。

は、私は、パラメータとしてストアドプロシージャにこの LanguageIDを渡し、その後、としてそれを使用する必要があります: - 私はとして LanguageIDを渡したくない場合は、私はこの LanguageID=FQ.LanguageID作業を行うことができますどのように

SELECT Language FROM Admin.Language WHERE [email protected] 

ストアドプロシージャの2番目の引数?方法はありますか?

答えて

2

おそらく、取得されているLanguageIDを保持するローカル変数を作成します。前のSELECTの間に値を割り当てます。 TOP 1を追加すると、最初のクエリに複数の一致がある場合(実際には@Quesがゼロまたはnullの場合)、そのクエリでは1つの値しか返されず、変数に単一の値が許可されます。

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 [email protected] 
+0

Plzは私の更新をチェックします.thnx – Serenity

+0

これは動作しません - あなたは変数を選択して割り当てています。おそらく編集? downvoteしたくない –

1

なぜ1に参加しないのですか?

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 
2

FQの範囲は最初のselect文に限定されています。

のオプションがあります。あなたが前の文で

  • 取得AdminLanguageIDを示唆しているように、パラメータとしてAdminLanguageIDを渡す

    1. (@AdminLanguageID = AdminLanguageIDからを選択...)
    2. Admin.Languageに参加しますAdmin.Quesを使用して
    3. サブクエリを使用する(AdminLanguageIDからAdminLanguageIDを選択したAdmin.LanguageからAdmin.Languageのどこかを選択...)
  • +0

    Plzは私の更新をチェックします.thnx – Serenity

    +0

    "DECLARE @Lang int"を始点の下に移動してもう一度試してください。 – Mayo

    関連する問題