Почему это невозможно в SQL Server?Где запрос с параметром NULL
Я получаю:
Неправильный синтаксис около '@pp'.
SQL:
declare @pp INT = null
select *
from ExtraExaminationsReportView
where [PayerId] is @pp
Почему это невозможно в SQL Server?Где запрос с параметром NULL
Я получаю:
Неправильный синтаксис около '@pp'.
SQL:
declare @pp INT = null
select *
from ExtraExaminationsReportView
where [PayerId] is @pp
Синтаксис, который вы написали, не будет работать по нескольким причинам.
Во-первых, если @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
)
Вы должны изменить логику запроса. Единственный способ:
declare @pp INT = null
select * from ExtraExaminationsReportView where ([PayerId] IS NULL OR [PayerId] = @pp)
проблема с вашим запросом заключается в том, что если '@ pp' является числом, то вы также будете возвращать строки, где' playerId' является 'null', что может быть нежелательно. – Tanner
Вы не можете параметризовать ключевые слова, вы можете попытаться сделать свой динамический запрос вместо – Petaflop
, почему вы хотите сделать это таким образом? вы не можете изменить '@ pp', например, 4. Ваш запрос будет 'где [PayerId] равен 4', что совершенно неверно. –