【发布时间】:2017-11-02 17:32:10
【问题描述】:
我正在尝试编写一个具有 3 个参数的查询脚本,但只能填充这三个参数的任意组合,其中之一,任意两个或全部三个。
我试过的查询如下,请问我做错了什么?
DECLARE @Parameter1 NVARCHAR(255) =''
DECLARE @Parameter2 NVARCHAR(255) = ''
DECLARE @Parameter3 NVARCHAR(10) = ''
SELECT x.*
from
(
SELECT
list of columns for various tables
,case when len(@Parameter1) > 1 and apa.ACTION_DESCRIPTION like ('%' +@Parameter1 + '%' ) then 1 else 0 end [Parameter1]
,case when len(@Parameter2) > 1 and p.plan_name like ('%' + @Parameter2 + '%' ) then 1 else 0 end [Parameter2]
,case when len(@Parameter3) > 1 and r.res_code like ('%' + @Parameter3 + '%' ) then 1 else 0 end [Parameter3]
FROM [LFB_Vision_GazAdmin].[dbo].[Gtablename] gap
left outer join [dbo].[table2] as ap on ap.PLAN_ID=gap.PLAN_ID
left outer join dbo.table3 p on p.plan_ID = p.PLAN_ID
left outer join dbo.table4 as apa on ap.[ACTION_ID] = apa.ACTION_ID
left outer join dbo.table5 R ON GAP.FCL_URN = R.FCL_URN
-- where
-- (apa.ACTION_DESCRIPTION like ('%' + @Parameter1 + '%')
--OR p.PLAN_NAME like ('%' + @Parameter2 + '%')
--OR R.RESPONSECODE = @Parameter3
-- )
) x
where (
(x.Parameter1=1 and (x.Parameter2=0 and x.Parameter3=0))
or (x.Parameter2=1 and (x.Parameter1=0 and x.Parameter3=0))
or (x.Parameter3=1 and (x.Parameter1=0 and x.Parameter2=0))
or (x.Parameter3=0 and (x.Parameter1=1 and x.Parameter2=1))
or (x.Parameter2=0 and (x.Parameter1=1 and x.Parameter3=1))
or (x.Parameter1=0 and (x.Parameter2=1 and x.Parameter3=1))
or (x.Parameter1=1 and x.Parameter2=1 and x.Parameter3=1)
)
如果我只填充一个参数,则上述查询有效,但如果我填充两个或全部三个参数,那么它会给我更多的行,因为它给我的数据与第一个或第二个参数中的两个有关。如果填充了两个参数,我希望它考虑这两个参数,如果填充了所有三个参数,则考虑所有三个参数。
如果能提供任何帮助,我将不胜感激。
先谢谢你了。
【问题讨论】:
-
你能告诉我我做错了什么吗? ...首先,告诉我们什么是错误的?不想要的结果?
-
@Parfait ,如果我只填充一个参数,它会起作用,但如果我填充两个或全部三个参数,那么它会给我更多的行,因为它给我的数据与第一个或第二个参数有关。如果填充了两个参数,我希望它考虑这两个参数,如果填充了所有三个参数,则考虑所有三个参数。
-
你有没有尝试过这个逻辑?这是
WHERE子句的用途还是这些子句与@Parameter# 无关,尤其是因为这两个集合是不同的类型?
标签: sql sql-server tsql parameters