我有一个非常简单的存储过程
SET ANSI_NULLS off
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER procedure [dbo].[TESTPARTSTATUS]
@PartNumber nvarchar(50)
as
begin
select * from VPPAPStatus where PartNumber = @PartNumber
end
我得到的结果与大多数零件号工作很好,但有一些零件号不返回任何结果。有些是由于没有数据,但有些是有数据,我可以在SSMS中查询,我看到预期的结果。像下图:
select * from VPPAPStatus where PartNumber = '84578452'
这返回2个结果(如预期的那样),但是当相同的PartNumber在存储过程中运行时,没有结果??
根据评论更新问题:
新的测试存储过程是
SET ANSI_NULLS on
GO
SET QUOTED_IDENTIFIER On
GO
ALTER procedure [dbo].[TESTPARTSTATUS]
@PartNumber nvarchar(50)
as
begin
select * from dbo.VPPAPStatus where PartNumber = @PartNumber
select * from dbo.VPPAPStatus where PartNumber = '84578452'
select @partnumber as 'INPUTPN'
end
当这个运行时,我通过@PartNumber选择时没有得到结果,通过'84578452'选择时得到2个结果,文本'84578452'作为InputPN返回
我完全被这种行为弄糊涂了,你知道在哪里检查或者检查什么吗?
沮丧和寻找周围的工作,我使用like LTrim(RTrim(@PartNumber))
令人恼火的是,这工作马上。
由于我从视图中选择,我修改了视图以提前修剪PN选择,这解决了使用相同字段的任何其他SP的问题
尽管当我在记事本中并排复制并粘贴这些值时,没有看到任何特殊字符或空格,但一定是有什么东西在存储过程中出错了。
经验教训-确保数据在进入数据库之前被修剪。