从 LIKE 查询和存储过程中获取不同的结果(开始和结束)搜索

Getting different results from LIKE query and stored procedure for (starts and ends with) search

我正在尝试实现一个存储过程,它获取两个参数@startsWith 和@endsWith 并构造此查询字符串:

@startswith + '%' + @endsWith

搜索以参数开始结束的单个列 (Name) 的条目。这是存储过程:

CREATE PROCEDURE termNameStartsEndsWith(
    @startsWith AS nvarchar, 
    @endsWith   AS nvarchar
)
AS
BEGIN
    SELECT * FROM Term WHERE
        Name LIKE (@startsWith + '%' + @endsWith) 
END;


但是,当两个查询参数之一为空 ('') 时,我得到了意想不到的结果。这是一个示例,我希望只有 Term 列条目以 'water' 开头的结果,但我得到了一堆额外的行:



作为查询执行时我没有得到这些结果:



所以我认为问题出在存储过程中以不同方式处理空字符串连接?如果是这样,我该如何相应地调整程序?

提前感谢您的帮助。

正如 Larnu 在评论中指出的那样,问题不在于查询,而在于您的参数声明。

您声明了两个 NVARCHAR(n) 参数,但没有为其中任何一个声明长度。来自documentation强调):

When n is not specified in a data definition or variable declaration statement, the default length is 1. When n is not specified with the CAST function, the default length is 30.

所以两个参数都是一个字符长。方便的是,SQL 服务器会让您为该参数分配一个更长的值,然后只取第一个字符并静默截断其余字符。

将您的参数修改为具有长度定义,您应该开始工作了。