Sql server 使用链接服务器的SQL Server存储过程

Sql server 使用链接服务器的SQL Server存储过程,sql-server,stored-procedures,wildcard,Sql Server,Stored Procedures,Wildcard,我有一个连接到ERP数据的链接服务器。如果我运行以下查询,我会得到想要的结果 SELECT ItemCode, ItemType, ItemCodeDesc FROM OPENQUERY(MAS90_Link_LPS, 'SELECT * FROM CI_Item') WHERE (ItemCode LIKE '%3M%') 然后,我创建了一个存储过程,它应该允许我更改搜索字符串。问题是它返回一个空记录集 CREATE Procedure [dbo].[FindItems] @Itemcode

我有一个连接到ERP数据的链接服务器。如果我运行以下查询,我会得到想要的结果

SELECT ItemCode, ItemType, ItemCodeDesc FROM OPENQUERY(MAS90_Link_LPS, 'SELECT * FROM CI_Item') WHERE (ItemCode LIKE '%3M%')
然后,我创建了一个存储过程,它应该允许我更改搜索字符串。问题是它返回一个空记录集

CREATE Procedure [dbo].[FindItems] @Itemcode char(30)
as
Select @itemcode = '%'+rtrim(@itemcode)+'%';
SELECT ItemCode, ItemType, ItemCodeDesc
FROM OPENQUERY(MAS90_Link_LPS, 'SELECT * FROM CI_Item') WHERE (ItemCode LIKE @itemcode);
return;
GO
exec FindItems @itemcode='3M'

我不明白为什么同一个查询在存储过程中不返回任何内容,但在正常窗口中执行查询时会给出正确的结果。在测试中,我发现只要不包含通配符,就可以得到结果。例如,如果我搜索一个精确的字符串,它可以正常工作。

尝试将存储过程的@Itemcode设置为varchar而不是char。按照您的方式,@itemcode末尾有许多空格可能会导致问题。

这就是我使用rtrim删除所有空格的原因。不过我会试试的,没那么蠢。不能将修剪过的字符串存储在固定宽度的字段中,并期望它不会填充结果。这是有效的。谢谢你的帮助。我以为我在程序中用rtrim命令来处理这个问题。显然,它所需要的只是一个不同的数据类型。