0

プロシージャにifステートメントを追加する必要があります。

CREATE PROCEDURE [dbo].[myProcedure]
  @name VARCHAR(8000) = NULL
 ,@lname VARCHAR(8000) = NULL
 ,@flag CHAR(1) = NULL


AS
BEGIN
 SET NOCOUNT ON;
    WITH t 
    (name
    ,lname
    )

AS
(
    SELECT DISTINCT 
    * FROM mytable
    WHERE 
  (@name IS NULL OR @name = name)
   IF @flag = 'c'
   BEGIN
      AND (@lname IS NULL OR @lname = 'Doe')
   END
   ELSE 
   BEGIN
    AND (@lname IS NULL OR @lname = lname)
   END
)

ご覧のとおり、フラグに応じて、lnameフィールドを何らかの方法で使用します。ifセクションでエラーが発生します..ここでifステートメントを使用できないのですか?そうでない場合、ifステートメントをどのように置き換えることができますか?

どうもありがとう

4

3 に答える 3

2

あなたはこのようにそれを行うことができます:

SELECT DISTINCT * 
FROM mytable
WHERE 
  (@name IS NULL OR @name = name)
   AND 
   (
      (@flag = 'c' AND (@lname IS NULL OR @lname = 'Doe'))
      OR 
      (@flag != 'c' AND (@lname IS NULL OR @lname = lname))
   )
于 2013-02-22T15:51:58.040 に答える
0

別の答えを提供するためだけに(CASEステートメントはSQLのIFステートメントに真に類似していると思うので):

SELECT 
DISTINCT 
    * 
FROM 
    mytable
WHERE 
    (@name IS NULL OR @name = name)
    AND 
    (@lname is NULL OR @lname = 
    CASE 
        WHEN @flag ='c' THEN 'Doe'
        ELSE lname
    END
    )
于 2013-02-22T15:56:23.190 に答える
0

これを試して

....
WHERE 
(@name IS NULL OR @name = name) AND
(
   (@flag = 'c' AND (@lname IS NULL OR @lname = 'Doe')) OR
   (@lname IS NULL OR @lname = lname)
)
于 2013-02-22T15:57:53.450 に答える