SQL参数不过滤适当的数据

时间:2017-10-02 15:13:49

标签: sql-server stored-procedures

我正在将参数@employeeID传递给我的SQL Server过程,我将其用作查询的过滤器。它没有正确过滤数据。我可以看到该值与过滤列的类型相同,但没有得到任何结果。

这是代码。

CREATE PROCEDURE [dbo].[SearchAssociatesById] 
    @EmployeeID VARCHAR(20)
AS
BEGIN
    PRINT @EmployeeID

    SET NOCOUNT ON;

    SELECT * 
    FROM ASSOCIATE A
    WHERE empl_id = @EmployeeID
END

结果为空,但正确打印@employeeID的值。如果我通过硬编码我的employeeID做同样的事情,那么我得到了正确的结果。

我在这里缺少什么?

Empl_id的数据类型为varchar(11)

This is when i use variable <code>@EmployeeID</code>

1 个答案:

答案 0 :(得分:0)

您提供的代码效果很好。

可能问题出在数据本身。

尝试改变您的程序: -

Alter PROCEDURE [dbo].[SearchAssociatesById] 
@EmployeeID varchar(20)
AS
BEGIN
print @EmployeeID

SET NOCOUNT ON;
select * 
FROM ASSOCIATE A
 where rtrim(ltrim(empl_id)) = @EmployeeID
end

<强>演示: -

Create table ASSOCIATE (empl_id varchar(11),name varchar(200))
insert into ASSOCIATE values ('   1','aaaaaaaaaaaa')

使用您的代码时不使用LTRIM&amp; RTRIM功能

exec [SearchAssociatesById] '2'

<强>结果: -

enter image description here

并使用LTRIM&amp; RTRIM功能

exec [SearchAssociatesById] '2'

<强>结果: -

enter image description here