我正在将参数@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)
答案 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'
<强>结果: - 强>
并使用LTRIM
&amp; RTRIM
功能
exec [SearchAssociatesById] '2'
<强>结果: - 强>