如何为like Search 编写Dynamic SqL Query?

How to write Dynamic SqL Query for like Search?

我在为类似搜索编写 SQL 动态查询时遇到一些问题。 我想为我的 problem.Please 寻求一些帮助,向我展示我的项目路线图。 我得到了 ACode BCode CCode 的结果,但 DCode 没有得到结果。 ACode Bcode CCode 可以得到正确的结果。 DCode 无法得到结果。我想用 LIKE SEARCH <<'% DCode %'>> 分配 DCode。 请帮忙。 谢谢你对我的问题感兴趣:)

Create PROCEDURE [dbo].[BDSPag] 
( 
 @Acode nvarchar(100)=null,    
 @BCode nvarchar(100)=null,    
 @CCode nvarchar(100)=null,    
 @DCode nvarchar(200)=null
)
AS         
BEGIN


Declare @SQL nvarchar(max)
        Declare @SqlParams nvarchar(max)
        Set @SQL = 'Select  ACode, BCode, CCode, DCode  FROM  tblCollection where 1=1'
        if(@Acode is not null) -- gp Code
        set @SQL= @SQL+' and CategoriesCode= @CC'
            if(@BCode is not null)--B Code
        set @SQL= @SQL+' and GItem= @GI'
            if(@CCode is not null) --C Code
        set @SQL= @SQL+' and CtdCode= @CtdC'


         declare @Paran nvarchar(150)
          set @Paran=' and DCode LIKE '''+ '%' + '@GN' + '%' + '''' 
        set @SQL= @SQL+  @Paran
     Execute sp_executesql @SQL,
         N'@CC nvarchar(100), @GI nvarchar(100), @CtdC nvarchar(100), @RecU nvarchar(100),@GIU nvarchar(100), @GN nvarchar(100) ',
         @CC=@ACode, @GI=@BCode, @CtdC=@CCode ,@GN=@DCode
    End

您无需将 Like 参数与其他参数区别对待。只需在参数值中添加“%”通配符即可。

Create PROCEDURE [dbo].[BDSPag] 
( 
 @Acode nvarchar(100)=null,    
 @BCode nvarchar(100)=null,    
 @CCode nvarchar(100)=null,    
 @DCode nvarchar(200)=null
)
AS         
BEGIN

  set @DCode = '%' + @DCode + '%'

  Declare @SQL nvarchar(max)
  Declare @SqlParams nvarchar(max)

  set @SqlParams = N'@CC nvarchar(100), @GI nvarchar(100), @CtdC nvarchar(100), @RecU nvarchar(100),@GIU nvarchar(100), @GN nvarchar(100) '

  Set @SQL = 'Select  ACode, BCode, CCode, DCode  FROM  tblCollection where 1=1'

  if(@Acode is not null) -- gp Code
    set @SQL= @SQL+' and CategoriesCode= @CC'
  if(@BCode is not null)--B Code
    set @SQL= @SQL+' and GItem= @GI'
  if(@CCode is not null) --C Code
    set @SQL= @SQL+' and CtdCode= @CtdC'
  if(@Dcode is not null) --D Code 
    set @SQL= @SQL+' and DCode like @GN'

  print @SQL -- Show the SQL statement to execute

  Execute sp_executesql @SQL,
                        @SqlParams,
                        @CC=@ACode, @GI=@BCode, @CtdC=@CCode, @GN=@DCode
End