将通配符与SET

时间:2018-09-21 09:02:33

标签: sql-server

productName   description

+++++++++++++++++++++++++

OpenIDM       Platform for building enterprise provisioning solutions

OpenDM        Full-featured access management

OpenDJ        Robust LDAP server for Java

在上表中,当我在查询下运行时,我得到了预期的前两个记录

DECLARE @searchInput varchar
SET @searchInput = 'dm'
SELECT * FROM ForgeRock
WHERE productName like '%DM%'

结果 用于构建企业置备解决方案的OpenIDM平台 OpenDM全功能访问管理

但是当我运行以下查询时,模式匹配似乎无法正常工作,并且我获得了所有记录。

DECLARE @searchInput varchar
SET @searchInput = 'dm'
SELECT * FROM ForgeRock
WHERE productName like '%'+@searchInput+'%'

http://sqlfiddle.com/#!18/6e9af/8

3 个答案:

答案 0 :(得分:4)

您没有声明varchar字符串的大小。默认值为1。在SELECT上进行@searchInput,亲自看看

DECLARE @searchInput varchar
SET @searchInput = 'dm'

SELECT @searchInput 

答案 1 :(得分:0)

是的,就像@Lamu和@Squirrel所说的那样,您应该声明搜索字符串的长度,例如:

DECLARE @searchInput varchar(50)

答案 2 :(得分:0)

默认情况下,当您声明不带任何大小os的变量时,它将取为1。 例如,您有贴花

DECLARE @searchInput varchar(10)
SET @searchInput = 'dm'

如果不声明大小,则仅声明d,并且d在所有行中均存在,因此它将返回所有行。