【发布时间】:2015-09-29 19:34:28
【问题描述】:
我目前有一个查询,它将根据我想要使用的任何where 条件从我的数据库中提取大量信息。
declare @CaseNum char(7),
@ImportId char,
@FormatId char,
@SessionId char(5)
set @CaseNum = '' --I can place the value that I want to search by in here
set @ImportId = ''
set @FormatId = ''
set @SessionId = ''
--------------------
query in here
--------------------
where
gr.[CaseNum] = @CaseNum --currently I have to comment the ones I'm not using out
--im.[ImportId] = @ImportId
--fr.[FormatId] = @FormatId
--se.[SessionId] = @SessionId
如果参数 = '',我希望能够取出注释部分并简单地显示所有行
例如,如果我使用set @CaseNum = '1234567',那么它将按该参数进行搜索,如果我使用@FormatId = '12',它将按该参数进行搜索。
我已经尝试使用以下方法和其他一些尝试,但我没有快速取得任何进展。
where
gr.[CaseNum] = '%' + @CaseNum + '%'
and im.[ImportId] = '%' + @ImportId + '%'
and fr.[FormatId] = '%' + @FormatId + '%'
and se.[SessionId] = '%' + @SessionId + '%'
【问题讨论】:
-
你可以使用
where ( gr.[CaseNum] = @CaseNum or @CaseNum is NULL ) and ...之类的东西,但是如果你重用执行计划,性能会受到影响。为每组参数重新编译查询将有所帮助,或者即时构建查询并执行生成的动态 SQL。查看页面右侧显示的一些“相关”SO 帖子,了解更多关于“动态 SQL”的信息。
标签: sql tsql parameters sql-server-2014