0

更新: 両方のパラメーターの値が提供されない可能性があるとのことでした。このような場合、携帯電話番号と電子メール アドレスの両方にフィルターを適用する必要はありません。

クエリの何が問題なのかを特定するのに苦労しています。基本的に、私は2つの変数を持っています

@EmlAdd
@MblNum

私がやりたいことは、次のルールを使用して検索することです: 2 つの変数の少なくとも 1 つに値が必要です メールアドレスの値のみを指定する場合、携帯電話番号のフィルターを無視する必要があります 携帯電話番号の値のみを指定する場合、メールアドレスのフィルタを無視する必要があります

これまでの私のソリューションで起こっていることは、次のとおりです。2つの変数の値が指定された場合:変数の1つだけに値がある場合は機能します:機能しません

DECLARE
@EmlAdd AS VARCHAR(100),
@MblNum AS VARCHAR(100)

SET @EmlAdd = ''
SET @MblNum = '5555555'

SELECT
    USER_ID,
CONTACT_VALUE
FROM
TBL_CONTACTS
WHERE
(
    (CONTACT_VALUE = @MblNum OR @MblNum = '')
        OR
    (CONTACT_VALUE = @EmlAdd OR @EmlAdd = '')
)

どんな助けでも大歓迎です。

4

6 に答える 6

1

これを試してみてください -

DECLARE 
      @EmlAdd VARCHAR(100)
    , @MblNum VARCHAR(100)

SELECT 
      @EmlAdd = ''
    , @MblNum = '5555555'

SELECT [USER_ID], CONTACT_VALUE
FROM dbo.TBL_CONTACTS
WHERE CONTACT_VALUE IN (@MblNum, @EmlAdd)
于 2013-09-25T06:43:26.213 に答える
0

検索するのは 1 つのデータ列だけなので、他の関連情報を提供することを怠っていない限り、それほど賢くする必要はありません。

DECLARE @EmlAdd As varchar(100)
      , @MblNum As varchar(100);

SET @EmlAdd = '';
SET @MblNum = '5555555';

/* Optional (recommended)
-- Set values to NULL if blank string is passed
SET @EmlAdd = NullIf(@EmlAdd, '');
SET @MblNum = NullIf(@MblNum, '');
*/

-- If both variables are NULL then no search criteria
IF Coalesce(@EmlAdd, @MblNum) IS NULL THEN
  BEGIN
    SELECT USER_ID
         , CONTACT_VALUE
    FROM   TBL_CONTACTS;
  END
-- At least one variable is not NULL so let's look for it
ELSE
  BEGIN
    SELECT USER_ID
         , CONTACT_VALUE
    FROM   TBL_CONTACTS
    WHERE  CONTACT_VALUE IN (@EmlAdd, @MblNum);
  END
;
于 2013-09-25T14:35:25.280 に答える
0

あなたはもうすぐそこにいます。'' を null に置き換えます

DECLARE @SAMPLE TABLE
(
[USER_ID] INT IDENTITY(1,1),
[CONTACT_VALUE] NVARCHAR(255)
)

INSERT INTO @SAMPLE 
VALUES 
('5555555'),
('Email@Yahoo.com')

DECLARE
@EmlAdd AS VARCHAR(100),
@MblNum AS VARCHAR(100)

SET @EmlAdd = ''
SET @MblNum = '5555555'

SELECT
USER_ID,
CONTACT_VALUE
FROM
@SAMPLE
WHERE

-- 変更はここにあります。'' を null に置き換えます。これは標準的なクエリの慣例であるため、cheer =)

(@EmlAdd is null or CONTACT_VALUE =@EmlAdd)
or
(@MblNum is null or CONTACT_VALUE = @MblNum)
于 2013-09-25T06:18:15.920 に答える
0

OR @MblNum = ''および OR @EmlAdd = ' ' を削除します。

1 つのパラメーターのみに値が設定されている場合、もう 1 つのパラメーターは'' (長さ 0 の文字列) と等しくなるため、すべての呼び出しで論理条件が満たされます。

DECLARE
@EmlAdd AS VARCHAR(100),
@MblNum AS VARCHAR(100)

SET @EmlAdd = ''
SET @MblNum = '5555555'

SELECT
    USER_ID,
CONTACT_VALUE
FROM
TBL_CONTACTS
WHERE
(
    (CONTACT_VALUE = @MblNum)
        OR
    (CONTACT_VALUE = @EmlAdd)
        OR
    (@EmlAdd='' AND @MblNum='')
)
于 2013-09-25T05:39:43.107 に答える
0

あなたが言っているのは、MblNum が空白の場合、または EmlAdd が空白の場合はすべてを返すということです。

真ん中の OR を AND に変更することもできます。

WHERE
(
    (CONTACT_VALUE = @MblNum OR @MblNum = '')
        AND
    (CONTACT_VALUE = @EmlAdd OR @EmlAdd = '')
)

そのように、MblNum は CONTACT_VALUE と一致する必要があり、EmlAdd は一致するか空である必要があり、その逆も同様です。両方のパラメーターを含める場合は、両方とも and に一致する必要があります。それでもどちらか一方を一致させたい場合は、空のパラメーターのチェックをドロップします。

WHERE CONTACT_VALUE = @MblNum OR CONTACT_VALUE = @EmlAdd

いずれかのパラメーターが空の場合、CONTACT_VALUE と一致してはならず、無視されます。

于 2013-09-25T04:09:42.853 に答える
0
DECLARE
@EmlAdd AS VARCHAR(100),
@MblNum AS VARCHAR(100)

SET @EmlAdd = ''
SET @MblNum = '5555555'

SELECT USER_ID, CONTACT_VALUE
FROM
TBL_CONTACTS
WHERE
(
  (CONTACT_VALUE = case when @MblNum = '' then @EmlAdd else case when @EmlAdd = '' then @MblNum  end end)

)
于 2013-10-02T09:26:11.017 に答える