Tsql SQL嵌套游标的替代方法
我创建了嵌套游标,它基本上将一个表的列值与另一个表的列值进行比较,并返回最接近的匹配项 表格内容如下: (列名称和值如下所示) 表A 表BTsql SQL嵌套游标的替代方法,tsql,cursor,sql-server-2000,Tsql,Cursor,Sql Server 2000,我创建了嵌套游标,它基本上将一个表的列值与另一个表的列值进行比较,并返回最接近的匹配项 表格内容如下: (列名称和值如下所示) 表A 表B **Names** PlainOrange SourOrange Grapple . . . 因此,游标1(外部游标)从表1中获取每个名称,并与表2中的所有名称进行比较,然后返回最接近的匹配项。游标2(内部游标)用于检索表2中的名称 我想看看,是否有一种方法可以用光标实现同样的效果 (因为它太慢了)避免使用光标始终是一种更好的做法,在您的情况下,我认为这也
**Names**
PlainOrange
SourOrange
Grapple
.
.
.
因此,游标1(外部游标)从表1中获取每个名称,并与表2中的所有名称进行比较,然后返回最接近的匹配项。游标2(内部游标)用于检索表2中的名称
我想看看,是否有一种方法可以用光标实现同样的效果
(因为它太慢了)避免使用光标始终是一种更好的做法,在您的情况下,我认为这也是可以实现的。关键是为了评估比较结果而执行的计算 一种解决方案是创建一个函数,该函数接受两个字符串并返回1/0值作为比较结果。然后,您可以在SELECT语句中调用该函数并保存游标迭代 下面是这样一个函数的示例:
CREATE FUNCTION fn_Compare
(
@firstValue varchar(50),
@secondValue varchar(50)
)
RETURNS bit
AS
BEGIN
DECLARE @Result bit
SET @Result = 0 --False by default
--!Here goes your specific logic for comparing string!
IF @firstValue = @secondValue
SET @Result = 1
RETURN @Result
END
GO
--Use it in a sentance
SELECT dbo.fn_Compare('TEST', 'TEST') AS Match --True
SELECT dbo.fn_Compare('TEST', 'TEST2') AS Match --False
--Use it in a query
SELECT
name,
name,
dbo.fn_Compare(name, name) AS Match
FROM sysobjects
WHERE
Type = 'u'
--Cleanup
DROP FUNCTION fn_Compare
我希望这能有所帮助。编辑您的问题,将您的代码包括在内。您能否详细说明如何确定“最接近的匹配项”?它是专有解决方案还是一些基本逻辑?tableB中的名称值包含在tableA中的名称中--例如:
其中tableA的值类似于“%”+tableB的值+“%”
CREATE FUNCTION fn_Compare
(
@firstValue varchar(50),
@secondValue varchar(50)
)
RETURNS bit
AS
BEGIN
DECLARE @Result bit
SET @Result = 0 --False by default
--!Here goes your specific logic for comparing string!
IF @firstValue = @secondValue
SET @Result = 1
RETURN @Result
END
GO
--Use it in a sentance
SELECT dbo.fn_Compare('TEST', 'TEST') AS Match --True
SELECT dbo.fn_Compare('TEST', 'TEST2') AS Match --False
--Use it in a query
SELECT
name,
name,
dbo.fn_Compare(name, name) AS Match
FROM sysobjects
WHERE
Type = 'u'
--Cleanup
DROP FUNCTION fn_Compare