我是SQL Server的新手。
我有一个表dbo.Example
,它有4列,如下所示:
|Barcode|Goods | Stock | Person |
-----------------------------------------
|0020307|Book |Available | Mike |
|0090010|Table |NULL | Jane |
|0140397|Chalk |NULL | Mike |
|0190017|Glass |NULL |Christoper|
|0080017|Hammer|Available | Ron |
我尝试使用参数创建一个存储过程,该参数在[Stock]
列中具有空值。
CREATE PROCEDURE examproc
@person NVARCHAR(50) = NULL,
@stock nvarchar(50) = NULL
AS
SELECT *
FROM dbo.Example
WHERE person = ISNULL(@person, person)
AND Stock = ISNULL(@stock, Stock) OR Stock IS NULL
使用参数:
执行这样的过程EXEC examproc @person = 'Mike'
但结果并非我的预期:
|Barcode|Goods | Stock | Person |
-----------------------------------------
|0020307|Book |Available | Mike |
|0090010|Table |NULL | Jane |
|0140397|Chalk |NULL | Mike |
|0190017|Glass |NULL |Christoper|
我知道我的SQL语句有问题,我仍然感到困惑。
我需要一个建议..
...谢谢
答案 0 :(得分:2)
在Modelica.Fluid.Examples.DrumBoiler.BaseClasses.EquilibriumDrumBoiler
条款中混合AND
和OR
时,您需要格外小心 - 试试这个:
WHERE
你可以通过省略第二个条件(CREATE PROCEDURE examproc
@person NVARCHAR(50) = NULL,
@stock nvarchar(50) = NULL
AS
SELECT *
FROM dbo.Example
WHERE person = ISNULL(@person, person)
AND (Stock = ISNULL(@stock, Stock) OR Stock IS NULL)
)来进一步简化它 - 这已经由第一个库存条件处理:
Stock IS NULL