sql - 存储过程与 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 的问题
即使当我在记事本中并排复制和粘贴这些值并且没有看到任何特殊字符或空格时,也一定有一些东西使存储过程出错。
经验教训 - 确保在进入数据库之前修剪数据。