不匹配TSQL代码结果的存储过程



我有一个非常简单的存储过程

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的问题

尽管当我在记事本中并排复制并粘贴这些值时,没有看到任何特殊字符或空格,但一定是有什么东西在存储过程中出错了。

经验教训-确保数据在进入数据库之前被修剪。