【发布时间】:2020-05-18 12:20:25
【问题描述】:
我正在尝试实现一个存储过程,它获取两个参数@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 列条目以“水”开头的结果,但我得到一堆额外的行:
作为查询执行时我没有得到这些结果:
所以我认为问题出在存储过程中以不同方式处理的空字符串连接?如果是这样,我该如何相应地调整程序?
提前感谢您的帮助。
【问题讨论】:
-
这与
LIKE无关,也与您使用nvarchar(1)s 无关。 总是声明您的长度、比例和精度。 Bad habits to kick : declaring VARCHAR without (length)。该查询完全按照应有的方式工作,因为所有这些字符串都以'W'开头;这就是您有效作为参数传递的内容。你的WHERE不是LIKE N'water' + '%' + N'',而是LIKE N'W' + '%' + N''。运行它,你会得到和你的 SP 一样的结果。
标签: sql sql-server tsql sql-server-2019