if在sql里怎么用

woshilaiwen_sql_de 2016-08-08 05:33:42
if @a!=""

select * from tb1 where 1=1 and id=@a

else

select * from tb1 where 1=1

穿了个参数到的sql中,不为空就加上where id=这个参数,为空就去掉这个条件
怎么弄。
...全文
895 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshilaiwen_sql_de 2016-08-09
  • 打赏
  • 举报
回复
引用 6 楼 gaojier1000 的回复:
CREATE TABLE tb1 ( id INT, col1 VARCHAR(10) )
INSERT  tb1
        SELECT  1 ,
                'AAAAA'
        UNION ALL
        SELECT  2 ,
                'BBBBB'
        UNION ALL
        SELECT  3 ,
                'CCCCC'
        UNION ALL
        SELECT  4 ,
                'DDDDD'

DECLARE @a INT
SET @a = 3
IF @a IS NOT NULL
    OR @a <> '' 
    SELECT  *
    FROM    tb1
    WHERE   1 = 1
            AND id = @a

ELSE 
    SELECT  *
    FROM    tb1
    WHERE   1 = 1
DROP TABLE tb1
像我这种新手,还是这个看起来明白一些。楼下的感觉完全不符合我的要求,楼上的没有看懂。
道素 2016-08-09
  • 打赏
  • 举报
回复

select * from tb1 where 1=1 and  isnull(nullif(@a,''),id)=id
  • 打赏
  • 举报
回复
CREATE TABLE tb1 ( id INT, col1 VARCHAR(10) )
INSERT  tb1
        SELECT  1 ,
                'AAAAA'
        UNION ALL
        SELECT  2 ,
                'BBBBB'
        UNION ALL
        SELECT  3 ,
                'CCCCC'
        UNION ALL
        SELECT  4 ,
                'DDDDD'

DECLARE @a INT
SET @a = 3
IF @a IS NOT NULL
    OR @a <> '' 
    SELECT  *
    FROM    tb1
    WHERE   1 = 1
            AND id = @a

ELSE 
    SELECT  *
    FROM    tb1
    WHERE   1 = 1
DROP TABLE tb1
专注or全面 2016-08-08
  • 打赏
  • 举报
回复
or连接sql条件不是一种好的方式,会引起全表扫描的把
CREATE PROCEDURE [dbo].ParameterSniffTest    
(    
    @p_CustomerId int,
    @p_Status int,
    @p_FromDate datetime,
    @p_ToDate datetime
) 
AS   
BEGIN

    SET NOCOUNT ON  
    DECLARE
        @Parm               NVARCHAR(MAX),
        @sqlcommand         NVARCHAR(MAX) = N''

        SET @sqlcommand = 'SELECT * FROM ParameterSniffProblem WHERE 1=1'
        
     IF(@p_CustomerId IS NOT NULL)
            SET @sqlcommand = CONCAT(@sqlcommand,'AND CustomerId=@p_CustomerId ')

        IF(@p_Status IS NOT NULL)
            SET @sqlcommand = CONCAT(@sqlcommand,'AND OrederStatus=@p_Status ')

        IF(@p_FromDate IS NOT NULL)
            SET @sqlcommand = CONCAT(@sqlcommand,'AND CreateDate>=@p_FromDate ')

        IF(@p_ToDate IS NOT NULL)
            SET @sqlcommand = CONCAT(@sqlcommand,'AND CreateDate<=@p_ToDate ')

        
    SET @Parm= '@p_CustomerId int,
                   @p_Status   int,
                   @p_FromDate  datetime,
                   @p_ToDate   datetime '
        
    EXEC sp_executesql @sqlcommand,@Parm,
                          @p_CustomerId    =    @p_CustomerId,
                          @p_Status        =    @p_Status,
                          @p_FromDate      =    @p_FromDate,
                          @p_ToDate        =    @p_ToDate 
END
GO
建议动态sql
中国风 2016-08-08
  • 打赏
  • 举报
回复
用OR或条件 ISNULL--把参数为NULL转为空字符‘’
中国风 2016-08-08
  • 打赏
  • 举报
回复
select * from tb1 where   id=@a OR ISNULL(@a,'')=''
woshilaiwen_sql_de 2016-08-08
  • 打赏
  • 举报
回复
差不多就上边那个意思。
woshilaiwen_sql_de 2016-08-08
  • 打赏
  • 举报
回复
我想弄成case

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧