sql - 声明的变量的行为与硬编码字符串不同

标签 sql sql-server variables

我试图将一个类似的参数设置到一个变量中,并允许该变量接受通配符(mssql 2005)。如果我使用设置为“%”的参数,它仅返回部分子集,但如果我对查询进行硬编码以使用“%”,它将返回完整集。为什么变量的行为可能与字符串不同?

DECLARE @wareno char(4); 
SET @wareno = '%';
select @wareno as a, * from waredesc where wareno like @wareno;

对比

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;

谢谢

最佳答案

char(4) 变量将用三个尾随空格填充。

这些是significant in a LIKE pattern它只会匹配以三个空格结尾的值。请改用 varchar(4)

关于sql - 声明的变量的行为与硬编码字符串不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13233129/

相关文章:

sql - 将 GETDATE() 转换为回历日期到 yyyymmdd

sql-server - 如何减少 Sql Server 中的搜索时间

sql-server - Entity Framework 代码优先与 SQL Server 同义词

css - 涉及自定义大小单位变量的纯 CSS if/else 语句

sql查询日期时间

sql - 如何在过程中使用ORDSYS.ORDImage更新SQL记录

mysql - SQL:选择在另一个表中不具有值的 ID/值组合

java - 在构建时在项目的所有文件中强制执行编码标准

javascript - 变量中定义的媒体查询和高度和宽度

php - 如何获取属性名称而不是变体中的 slug?