0

次のストアドプロシージャを作成しました。

ALTER PROCEDURE [dbo].[ExampleSP]
(
    @SearchText NVARCHAR(4000),
    @ID INT = NULL
)
AS
BEGIN
SET NOCOUNT ON;

SELECT 
deID,
deTitle
FROM tblDemo As de
LEFT JOIN tblLinkTable As lnk ON (lnk.ID = de.deID)
WHERE CONTAINS(cstKeywords, @SearchText)
AND ((@ID IS NULL) OR (lnk.ID = @ID))
GROUP BY deID,Title 
ORDER BY de.Title

ただし、次のテーブル列からnullではない最初のフィールドを見つけることもできる必要があります。

deIntroText、deCompanyText、deTimetableText、およびdeExampleText

そして、SELECTから返されるレコードごとにこれを行う必要があります。

だから私はそれを格納するための一時的な列を作成する必要があることを理解し、次のようなIFステートメントを使用する必要があると思います:

IF deIntroText IS NOT Null 
THEN TempFieldToReturn = 1

ELSE IF deCompanyText IS NOT Null 
THEN TempFieldToReturn = 2

ELSE IF deTimetableText IS NOT Null 
THEN TempFieldToReturn = 3

ELSE IF deExampleText IS NOT Null
THEN TempFieldToReturn = 4

だから私の質問は-これを達成するための最良の方法は何ですか?任意の例をいただければ幸いです。

4

1 に答える 1

4

実際のショートカットはありません-CASE式を使用するだけです:

SELECT
   /* Other Columns */
  CASE
    WHEN deIntroText IS NOT Null THEN 1
    WHEN deCompanyText IS NOT Null THEN 2
    WHEN deTimetableText IS NOT Null THEN 3
    WHEN deExampleText IS NOT Null THEN 4
  ELSE 5 END as OtherColumn
FROM
  /* Rest of query */

これは検索済みですCASE-実際には2つのバリアントがありCASEます。すべての列が5であると推測しました。そのような場合に結果が必要な場合NULLは、そのELSE 5部分を省略できます。NULL

于 2012-07-06T08:09:39.140 に答える