为什么在SQL Server中无法实现这一点?
我得到了:
'@pp'附近的语法不正确。
SQL:
declare @pp INT = null
select *
from ExtraExaminationsReportView
where [PayerId] is @pp
答案 0 :(得分:1)
您必须更改查询逻辑。唯一的方法是:
declare @pp INT = null
select * from ExtraExaminationsReportView where ([PayerId] IS NULL OR [PayerId] = @pp)
答案 1 :(得分:1)
您编写的语法因某些原因而无法正常工作。
首先,如果@pp
是int
,则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
)