有关SQL存储过程变量模糊查询

在存储过程中定义变量 @CaseID varchar(256)
AS
SELECT*FROM 表xxx WHERE 字段ID like '%'+rtrim(@ID)+'%'

我数据库里的ID是12345,我已经测试过,上面的代码效果是: 输入1 或12 或23 或34 或123 或2345 或345 等等, 只要是顺着排下来的输入条件都能查询到预期的结果,到此很圆满.
可是,我想输入125,也就是不顺着数字输入,根据125这个查询条件,或者124,或者235,或者25, 隔开输入查询条件就查不出来了. 怎么办? 帮个忙 谢谢!
谢谢. 现在比如是根据126查询 我输入19999也能查出来,因为含有1,也就是成了只要含有ID当中任意一个数字的查询条件都能查出来,怎么解决?
还有,我用一个变量在SQL存储过程中可以返回一个结果.现在是想通过执行存储过程一次性返回多个结果,请问变量该怎么定义?
在SQL中是不允许定义数组变量的,这个我明白. 问题是怎么用表格抽象变量的方法或者有其他办法.
我马上再追加分数.希望能帮帮忙!
代码是这样的:Create PROCEDURE [dbo].[tblNASurveyResults_GetList]
@CaseID varchar(256) ,
@ClosedDate varchar(256) output
AS
SELECT @ClosedDate = ClosedDate
where
CaseID like '%('+@CaseID+')%'
问题是我根据CaseID经过的模糊查询之后,返回的结果ClosedDate列是很多值,是一个集合,而不是一个值.那么这样定义"@ClosedDate"肯定是不行的.该怎么办?
(比如:我输入叫黎明的同学名字,经过查询之后返回很多身高,跟黎明同学重名的所有人的身高都查出来了.)

小菜一叠啦^_^

DECLARE @CaseID varchar(256)
SET @CaseID = '125'
SELECT * FROM [tb_tableName] WHERE 字段ID LIKE '%['+@CaseID+']%'

上面这个正则查询就可以满足你的要求呀

DECLARE @CaseID varchar(256)
SET @CaseID = '19999'
SELECT * FROM [tb_aTemp] WHERE 字段ID LIKE '%['+@CaseID+']%'

TO:我用一个变量在SQL存储过程中可以返回一个结果.现在是想通过执行存储过程一次性返回多个结果,请问变量该怎么定义?

RE:

CREATE PROCEDURE SP_tableName(
@CaseID NVARCHAR(50)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE INT @Identity
SET @Identity = 0
INSERT INTO [tb_tableName] (CaseID)VALUES(@CaseID)
SET @Identity = SCOPE_IDENTITY()

IF (@Identity)>0
BEGIN
SELECT * FROM [tb_tableName] --这里根据你的查询条件,返回的多个需要的得到的字段
END
SET NOCOUNT OFF
END
GO

-- 程序调用的时候用 DataSet 来获得多个你需要的字段值,如果 DataSet 返回 0 或者抛出异常则插入数据失败

-- 带返回值的

CREATE PROCEDURE SP_tableName(
@CaseID NVARCHAR(50),
@Identity INT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO [tb_tableName] (CaseID)VALUES(@CaseID)
SET @Identity = SCOPE_IDENTITY()

IF (@Identity)>0
BEGIN
SELECT * FROM [tb_tableName] --这里根据你的查询条件,返回的多个需要的得到的字段
END
SET NOCOUNT OFF
RETURN @Identity
END
GO

-- 程序调用的时候用 DataSet 来获得多个你需要的字段值, 并可获得刚插入的自动编号输出参数
-- 如果 DataSet 返回 0 ,或者 @Identity 返回0, 或者 DataSet 抛出异常则插入数据失败

首先你要明白模糊查询和精确查询的概念,试想百度,GOOGLE的技术力量那么专业强大,其模糊查询的结果不同样也存在很多很多的冗余数据吗

CaseID like '%['+@CaseID+']%' 结果当然是贪婪模式

当然,你也可以采用如下方法使其尽可能的接近目标匹配:

%
_
[]
[^]
等等...........

如果精确查询,必须

CaseID=@CaseID

或者

CaseID IN (@CaseID)

在模糊查询的情况下,解决重复数据的唯一方法就是再增加一个(或N个)查询条件
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-04
select
*
from
user
where
user_name
like
'%'
||
变量
||
'%'
这样写就可以了。
相似回答