Sql server 这个程序还有其他方法吗?

Sql server 这个程序还有其他方法吗?,sql-server,Sql Server,我在一个表中有7个字段;字段的可能组合会产生一些结果。一个组合可以是1、4、7或全部,依此类推,可以根据客户机的给定动态更改。我必须为它创建一个程序。这些字段是位类型。除了通过If-Else…If-Else定义每个案例外,还有其他方法创建这些程序吗 @Chk_title AS BIT , @Chk_Description AS Bit , @Chk_Keywords AS BIT, @Chk_Category AS BIT, @Chk_Location AS BIT, @Chk_Source A

我在一个表中有7个字段;字段的可能组合会产生一些结果。一个组合可以是1、4、7或全部,依此类推,可以根据客户机的给定动态更改。我必须为它创建一个程序。这些字段是位类型。除了通过If-Else…If-Else定义每个案例外,还有其他方法创建这些程序吗

@Chk_title AS BIT ,
@Chk_Description AS Bit ,
@Chk_Keywords AS BIT,
@Chk_Category AS BIT,
@Chk_Location AS BIT,
@Chk_Source AS BIT,
@Chk_Date AS BIT,
@RD_btn_AND_OR AS BIT

AS

if @RD_btn_AND_OR = 1
Begin
    if  @Chk_title = 1 AND @Chk_Description=1 AND @Chk_Keywords=1 @Chk_Category=1 @ Location=1 @ Chk_Source=1 @Chk_Date=1
        Begin
        Select title, Description, Keywords, category, Location, source, Date from server_des where title Like '%'+@title+'%' AND Description  Like '%'+@Description+'%' AND Keywords Like '%'+@Keywords+'%' AND category Like '%'+@Category+'%' AND Location Like '%'+@Location+'%'AND source Like '%'+@Source+'%' AND Date Like '%'+@Date+'%'
        End
     ELSE if  @Chk_title = 1 AND @Chk_Description = 1 AND @Chk_Keywords = 0 @Chk_Category=1 @ Location=1 @ Chk_Source=1 @Chk_Date=0
        Begin
        Select title, Description, null as'Keywords', category, Location, source, Date from server_des where title Like '%'+@title+'%' AND  Description  Like '%'+@Description+'%' AND category Like '%'+@Category+'%' AND Location Like '%'+@Location+'%' AND source Like '%'+@Source+'%' AND Date Like '%'+@Date+'%'
        End
     ELSE if @Chk_title=0 AND @Chk_Description=1 AND @Chk_Keywords=1  @Chk_Category=1 @ Location=1 @ Chk_Source=0 @Chk_Date=1
        Begin
        Select null as'Title', Description, Keywords, category, Location, source, Date from server_des where  Description  Like '%'+@Description+'%' AND  Keywords Like '%'+@Keywords+'%' AND category Like '%'@Category'%' AND Location Like '%'+@Location+'%' AND source Like '%'+@Source+'%' AND Date Like '%'+@Date+'%'
        End
END

您可以像这样将其全部放在一个语句中,但您应该检查以确保创建的执行计划不会比旧解决方案严重(如果性能对于此存储过程很重要):

选择标题、描述、关键字、类别、位置、来源、日期
从服务器\u des
其中(@Chk_title 1或类似“%”+@title+'%”的标题)
和(@Chk_Description 1或类似“%”+@Description+'%”的描述)
和(@Chk_关键字1或类似“%+@Keywords+%”的关键字)
和(@Chk_类别1或类似“%”+@Category+'%”的类别)
和(@Chk_位置1或类似“%”+@Location+'%”的位置)
和(@Chk_Source 1或类似于“%”+@Source+“%”的源)
和(@Chk_Data 1或类似于“%”+@Date+%的日期)

您可以基于数据使用动态SQL-编写SQL命令并运行它。像这样:

@Chk_title AS BIT ,
@Chk_Description AS Bit ,
@Chk_Keywords AS BIT,
@Chk_Category AS BIT,
@Chk_Location AS BIT,
@Chk_Source AS BIT,
@Chk_Date AS BIT,
@RD_btn_AND_OR AS BIT

AS

DECLARE @cmdSQL VARCHAR(250)
SET @cmdSQL = 'Select'

if @RD_btn_AND_OR = 1
Begin
    if  @Chk_title <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' title,'
    if  @Chk_Description <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Description,'
    if  @Chk_Keywords <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Keywords,'
    if  @Chk_Category <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Category,'
    if  @Chk_Location <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Location,'
    if  @Chk_Source <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Source,'
    if  @Chk_Date <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Date'
End

SET @cmdSQL = @cmdSQL + ' from server_des where title Like ''%''+@title+''%'' AND Description  Like ''%''+@Description+''%'' AND Keywords Like ''%''+@Keywords+''%'' AND category Like ''%''+@Category+''%'' AND Location Like ''%''+@Location+''%''AND source Like ''%''+@Source+''%'' AND Date Like ''%''+@Date+''%'''

EXEC(@cmdSQL)
END
@Chk_title作为位,
@Chk_描述为位,
@Chk_关键字作为位,
@Chk_类别作为位,
@Chk_位置作为位,
@Chk_源作为位,
@Chk_日期作为位,
@RD_btn_和_或AS位
作为
声明@cmdSQL VARCHAR(250)
SET@cmdSQL='Select'
如果@RD_btn_和_OR=1
开始
如果@Chk_标题1
将@cmdSQL=@cmdSQL+'null设置为'
设置@cmdSQL=@cmdSQL+'标题,'
如果@Chk_描述1
将@cmdSQL=@cmdSQL+'null设置为'
设置@cmdSQL=@cmdSQL+'说明,'
如果@Chk_关键字1
将@cmdSQL=@cmdSQL+'null设置为'
设置@cmdSQL=@cmdSQL+'关键字,'
如果@Chk_类别1
将@cmdSQL=@cmdSQL+'null设置为'
设置@cmdSQL=@cmdSQL+'类别,'
如果@Chk_位置1
将@cmdSQL=@cmdSQL+'null设置为'
设置@cmdSQL=@cmdSQL+'位置,'
如果@Chk_源1
将@cmdSQL=@cmdSQL+'null设置为'
设置@cmdSQL=@cmdSQL+'Source,'
如果@Chk_日期1
将@cmdSQL=@cmdSQL+'null设置为'
设置@cmdSQL=@cmdSQL+“日期”
终点
从服务器端设置@cmdSQL=@cmdSQL+',其中标题为''%'+@title+'%',描述为''%'+@Description+'%',关键字为''%'+@Keywords+'%',类别为''%'+@category+'%',位置为''+'%',源为''%'+@source+'%',日期为''%'+'''''''
EXEC(@cmdSQL)
结束

我不明白您所说的“检查以确保创建的执行计划不会比旧解决方案差很多”这句话的意思:“SQL是一种高级、非过程性语言。服务器执行查询所采取的实际步骤由调用查询优化器的组件生成。根据您的服务器设置,查询优化器可能会尝试生成一个适合任何输入值集的计划,如果不同的输入值集显著改变了满足查询所需的工作量,则可能会导致性能下降。@Serg-您好,我是这个网站的新手,所以我不知道如何发布问题直接给你。我已经发布了与此相关的新问题,因为我需要在其中设置格式。你能解决这个问题吗problem@Aishna我想我们可以使用SQL server聊天室-。“还有。”塞格再次感谢你。但我无法访问它,因为我的Stackflow声誉对于该应用程序来说很低。无论如何Thanks@Aishna也许你可以在我的个人资料中看到电子邮件或网站?
@Chk_title AS BIT ,
@Chk_Description AS Bit ,
@Chk_Keywords AS BIT,
@Chk_Category AS BIT,
@Chk_Location AS BIT,
@Chk_Source AS BIT,
@Chk_Date AS BIT,
@RD_btn_AND_OR AS BIT

AS

DECLARE @cmdSQL VARCHAR(250)
SET @cmdSQL = 'Select'

if @RD_btn_AND_OR = 1
Begin
    if  @Chk_title <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' title,'
    if  @Chk_Description <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Description,'
    if  @Chk_Keywords <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Keywords,'
    if  @Chk_Category <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Category,'
    if  @Chk_Location <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Location,'
    if  @Chk_Source <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Source,'
    if  @Chk_Date <> 1
        SET @cmdSQL = @cmdSQL + ' null as'
    SET @cmdSQL = @cmdSQL + ' Date'
End

SET @cmdSQL = @cmdSQL + ' from server_des where title Like ''%''+@title+''%'' AND Description  Like ''%''+@Description+''%'' AND Keywords Like ''%''+@Keywords+''%'' AND category Like ''%''+@Category+''%'' AND Location Like ''%''+@Location+''%''AND source Like ''%''+@Source+''%'' AND Date Like ''%''+@Date+''%'''

EXEC(@cmdSQL)
END