其中查询使用NULL参数

时间:2016-08-18 08:37:14

标签: sql-server

为什么在SQL Server中无法实现这一点?

我得到了:

  

'@pp'附近的语法不正确。

SQL:

declare @pp INT = null

select * 
from ExtraExaminationsReportView  
where [PayerId] is @pp

2 个答案:

答案 0 :(得分:1)

您必须更改查询逻辑。唯一的方法是:

declare @pp INT = null
select * from ExtraExaminationsReportView  where  ([PayerId] IS NULL OR [PayerId] = @pp)

答案 1 :(得分:1)

您编写的语法因某些原因而无法正常工作。

首先,如果@ppint,则IS @PP语法不正确,IS语法与NULL一起使用:

SELECT * FROM TABLE WHERE COL IS NULL

你无法做到:

SELECT * FROM TABLE WHERE COL IS 1

检查数值时,您需要使用=

SELECT * FROM TABLE WHERE COL = 1

因此,为了满足NULL值或INT值,您可以使用OR子句中的WHERE来检查值,如下所示:

DECLARE @pp INT = NULL  -- you can set this to 1 to show it works for both

-- temp table with a null value and an int value = 1
SELECT  1 val
INTO    #TMP
UNION ALL
SELECT  NULL

SELECT  *
FROM    #TMP
WHERE   ( @pp IS NULL
          AND val IS NULL
        )  
        OR ( @pp IS NOT NULL
             AND val = @pp
           )  

DROP TABLE #TMP

修改您的代码:

DECLARE @pp INT = NULL

SELECT * 
FROM ExtraExaminationsReportView  
WHERE   ( @pp IS NULL
          AND PayerId IS NULL
        )
        OR ( @pp IS NOT NULL
             AND PayerId = @pp
           )
相关问题