如何使用案例和哪里?我试过这些线,显示错误?是否可以使用将使用参数选择where条件的查询。
在这里,我想通过'姓名'和'类别',如果是,则它将使用类似于具有名称的opearator,如果'类别'然后它会选择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
)
答案 0 :(得分:4)
CASE
是一个表达式 - 它必须返回一个值。至于SQL Server,至少到目前为止,谓词的结果不是值。
尝试使用更简单的AND / OR条件重写您的查询:
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 :(得分:1)
使用或/和条件。我认为你当时不需要案例陈述。
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+'%' ) )
答案 2 :(得分:1)
您也可以使用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
答案 3 :(得分:0)
在哪里可以获得建议的答案?如果没有,为什么不先尝试使用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