日期:2014-05-17  浏览次数:20453 次

函数查询where条件变量

大家好,现如今我有这样一个存储过程:
然后我代码传过来变量,我的存储过程通过判断变量是否为空,来决定是否添加这条where条件。
如:片段
    
IF @MeterKey IS NOT NULL  
       SET @sqlWhere += '  AND Key like ''%'+@MeterKey+'%'' '


完整:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROC [dbo].[usp_Meter_GetManuallyRecordReportDt]
@MeterType VARCHAR(2) = NULL,
@MeterName VARCHAR(200) = NULL,
@MeterKey VARCHAR(200) = NULL,
@AdministrativeUnit VARCHAR(20) = NULL,
@BuildingRegion VARCHAR(20) = NULL,
@Usesign VARCHAR(20) = NULL,
@AdministrativeUnitChildFlag BIT,
@BuildingRegionChildFlag BIT,
@UsesignChildFlag BIT,
@AllMeterFlag BIT,
@CollectorIP VARCHAR(50) = NULL
                       
AS
BEGIN
    CREATE TABLE #MyTempTable (Tabno INT PRIMARY KEY) 
      DECLARE @sql NVARCHAR(MAX)
  DECLARE @sqlWhere VARCHAR(500)
 BEGIN
           SET @sqlWhere = '  1=1 AND Type = '''+@MeterType+'''  '
           
            IF @MeterKey IS NOT NULL  
       SET @sqlWhere += '  AND Key like ''%'+@MeterKey+'%'' '
       
    IF @MeterName IS NOT NULL 
       SET @sqlWhere += '  AND Name like ''%'+@MeterName+'%'' '
       
    IF @AdministrativeUnit IS NOT NULL 
      BEGIN
        IF @AdministrativeUnitChildFlag=1
           SET @sqlWhere += '  AND AdministrativeUnit like ''%' + @AdministrativeUnit  + '%'' '
        ELSE
           SET @sqlWhere += '  AND AdministrativeUnit =''' + @AdministrativeUnit  + ''' '
      END
       
    IF @BuildingRegion IS NOT NULL  
      BEGIN
        IF @BuildingRegionChildFlag=1
               SET @sqlWhere += '  AND BuildingRegion like ''%' + @BuildingRegion  + '%'' '
        ELSE
           SET @sqlWhere += '  AND BuildingRegion =''' + @BuildingRegion