我试图将一个like参数设置为变量,并允许该变量接受通配符(mssql 2005)。如果我使用我的参数设置为'%'它只返回一个部分子集,但如果我硬编码查询使用'%'它返回完整集。为什么变量的行为与字符串不同?
DECLARE @wareno char(4);
SET @wareno = '%';
select @wareno as a, * from waredesc where wareno like @wareno;
VS
DECLARE @wareno char(4);
SET @wareno = '%';
select @wareno as a, * from waredesc where wareno like '%';
完整方案是基于标志进行切换,但在上面的代码中可以重现
DECLARE @wareno char(4);
DECLARE @delprods bit;
/**
SET THESE PARAMETERS
**/
SET @wareno = '1';
SET @delprods = 'true'; /** if true all the warehouses should also be emptied for safety - products are held at a company level!**/
IF @delprods = 1
BEGIN
SET @wareno = '%';
END
select @wareno as a, * from waredesc where wareno like @wareno;
由于
答案 0 :(得分:9)
char(4)
变量将填充三个尾随空格。
这些是significant in a LIKE
pattern,它只匹配以三个空格结尾的值。请改用varchar(4)
。