Случай с условием Где в Sql Server 2008 - PullRequest
0 голосов
/ 13 июня 2011

Как использовать чехол и где?Я пробовал эти строки, это показывает ошибку?Можно ли использовать запрос, который выберет условие where с помощью параметра.

Здесь я пытаюсь передать «Имя» и «Категория», если Имя, то он будет использовать как оператор с именем, еслиCategory 'тогда он выберет LIKE с категорией.

 Select * 
  FROM  [tblAssetAccessory] assry
  WHERE 
  (CASE @Query
    WHEN 'Name' THEN assry.accessry_name like '%'+@Search+'%' END 
    WHEN 'Category' THEN assry.accessory_CategoryID IN 
        (SELECT asryCat.accessory_CategoryID FROM [Asset].tblAssetAccessory_Category asryCat 
             WHERE asryCat.accessory_Category LIKE '%'+@Search+'%' ) END )
          AND assry.company_ID=@company_ID
          AND assry.branch_ID=@branch_ID
          AND assry.division_ID=@division_ID
          AND assry.isDeleted=0 
          )

Ответы [ 4 ]

4 голосов
/ 13 июня 2011

CASE - это выражение - оно должно возвращать значение. А для SQL Server пока, по крайней мере, результат предиката не является значением.

Попробуйте переписать запрос, используя более простые условия И / ИЛИ:

Select * 
FROM  [tblAssetAccessory] assry
WHERE
   (
       (
           @Query = 'Name' AND
           accessry_name like '%'+@Search+'%'
       )
       OR
       (
           @Query = 'Category' AND
           EXISTS (SELECT * from [Asset].tblAssetAccessory_Category asryCat
               where
                   asryCat.accessory_CategoryID = assry.accessory_CategoryID AND
                   asryCat.accessory_Category LIKE '%'+@Search+'%')
       )
   )
   AND
      company_ID=@company_ID
      branch_ID=@branch_ID
      division_ID=@division_ID
      isDeleted=0 
1 голос
/ 13 июня 2011

также вы можете создать строку запроса и выполнить ее, используя sp_executesql

declare @qrystr nvarchar(500)
set @qrystr = ' Select * 
  FROM  [tblAssetAccessory] assry
  WHERE '
  if @Query = 'Name'
   set @qrystr = @qrystr  + 'assry.accessry_name like ''%'+@Search+'%'' END'
  else 
    set @qrystr = @qrystr  + 'assry.accessory_CategoryID IN 
        (SELECT asryCat.accessory_CategoryID FROM [Asset].tblAssetAccessory_Category asryCat 
             WHERE asryCat.accessory_Category LIKE ''%'+@Search+'%'' ) END )
          AND assry.company_ID=@company_ID
          AND assry.branch_ID=@branch_ID
          AND assry.division_ID=@division_ID
          AND assry.isDeleted=0 
          )'

          exec sp_execute @qrystr
1 голос
/ 13 июня 2011

используйте условие или / и.Я не думаю, что вам нужно заявление по делу.

WHERE (@Query = 'Name' AND assry.accessry_name like '%'+@Search+'%') OR (@Query = 'Category' AND (assry.accessory_CategoryID IN 
        (SELECT asryCat.accessory_CategoryID FROM [Asset].tblAssetAccessory_Category asryCat 
             WHERE asryCat.accessory_Category LIKE '%'+@Search+'%' ) )
0 голосов
/ 13 июня 2011

Где вы можете получить предложенные ответы? Если нет, то почему бы вам не попробовать сначала проверить условие с помощью CASE, а затем продолжить выполнение запроса. Смотрите код ниже:

CASE @Query
    WHEN 'Name' THEN 
    Select * 
    FROM  [tblAssetAccessory] assry
    WHERE assry.accessry_name like '%'+@Search+'%' 
    END 
    WHEN 'Category' THEN 
        Select * 
    FROM  [tblAssetAccessory] assry
    WHERE assry.accessory_CategoryID IN 
         (SELECT asryCat.accessory_CategoryID FROM [Asset].tblAssetAccessory_Category asryCat 
         WHERE asryCat.accessory_Category LIKE '%'+@Search+'%' ) END )
         AND assry.company_ID=@company_ID
         AND assry.branch_ID=@branch_ID
         AND assry.division_ID=@division_ID
         AND assry.isDeleted=0 
         )
    END 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...