ALTER proc [dbo].[proc_GetPrjWhere]
@Dptid int,
@Userid int,
@PrjCode varchar(20),
@BCreatdate datetime,
@ECreatdate datetime
as
declare @where varchar(200)
set @where = '1=1'
exec('select * from Info_prjvalues where ='+@where+'')
执行后说 “=”号附近有语法错误

解决方案 »

  1.   


    declare @where varchar(200)
    set @where = '1=1'
    DECLARE @sql VARCHAR(500)
    SET @sql='select * from Info_prjvalues where ='+@where+''
    SELECT @sql
    /*
    select * from Info_prjvalues where =1=1
    */两个等号,所以不对
      

  2.   


    ALTER PROC [dbo].[proc_GetPrjWhere]
        @Dptid INT ,
        @Userid INT ,
        @PrjCode VARCHAR(20) ,
        @BCreatdate DATETIME ,
        @ECreatdate DATETIME
    AS 
        DECLARE @where VARCHAR(200)
        SET @where = '1=1'
        EXEC('select * from Info_prjvalues where '+@where)--''是空字符串加上也没有用
      

  3.   


    这个可用IF ... ELSE ...循环可用while
      

  4.   

    ALTER proc [dbo].[proc_GetPrjWhere]
    @Dptid int,
    @Userid int,
    @PrjCode varchar(20),
    @BCreatdate datetime,
    @ECreatdate datetime
    as
    declare @where varchar(200)
    set @where = '1=1'
    if(@Dptid is not null)
    begin
    set @where = 'Dptid ='+@Dptid
    end
    exec('select * from Info_prjvalues where '+@where+'')执行后Dptid 转换成int型失败。  为什么??
      

  5.   


    ALTER PROC [dbo].[proc_GetPrjWhere]
        @Dptid INT = NULLL ,
        @Userid INT = NULLL ,
        @PrjCode VARCHAR(20) = NULLL ,
        @BCreatdate DATETIME = NULLL ,
        @ECreatdate DATETIME = NULLL
    AS 
    --第一种方式,设置默认值为null 用isnull 判断,当没有这个参数时,为null
        SELECT  *
        FROM    Info_prjvalues
        WHERE   Dptid = ISNULL(@Dptid, Dptid)
                AND Userid = ISNULL(@Userid, Userid)
      

  6.   

    ALTER proc [dbo].[proc_GetPrjWhere]
        @Dptid int,
        @Userid int,
        @PrjCode varchar(20),
        @BCreatdate datetime,
        @ECreatdate datetime
    as
    declare @where varchar(200)
    set @where = '1=1'
    if(@Dptid is not null)
    begin
    set @where = 'Dptid ='+ltrim(@Dptid)end
    exec('select * from Info_prjvalues where '+@where+'')
      

  7.   


    ALTER PROC [dbo].[proc_GetPrjWhere]
        @Dptid INT = NULLL ,
        @Userid INT = NULLL ,
        @PrjCode VARCHAR(20) = NULLL ,
        @BCreatdate DATETIME = NULLL ,
        @ECreatdate DATETIME = NULLL
    AS 
    --第二种方式,就是用if判断了
        DECLARE @where VARCHAR(8000)
        SET @where = ''
        IF ( @Dptid IS NOT NULL ) 
            SET @where = @where + 'and Dptid=' + LTRIM(@Dptid) + ' '
        IF ( @Userid IS NOT NULL ) 
            SET @where = @where + 'and Userid=' + LTRIM(@Userid) + ' '
        EXEC('select * from Info_prjvalues where 1=1 '+@where)
      

  8.   

    ALTER proc [dbo].[proc_GetPrjWhere]
    @Dptid int = null,
    @Userid int = null,
    @PrjCode varchar(20) = null,
    @BCreatdate datetime = null,
    @ECreatdate datetime = null
    as
    declare @where varchar(200)
    set @where = '1=1'
    if(@Dptid is not null and @Userid is null)
    begin
    set @where = 'Dptid ='+LTRIM(@Dptid)
    end
    if(@Userid is not null and @Dptid is not null)
    begin
    set @where ='Userid ='+LTRIM(@Userid)+' and Dptid ='+LTRIM(@Dptid)
    end
    if(@PrjCode is not null)
    begin
    set @where ='PrjCode = '+@PrjCode
    end
    exec('select * from Info_prjvalues where '+@where+'')消息 207,级别 16,状态 1,第 1 行
    列名 '有间客栈' 无效。(1 行受影响)