Tsql 步骤至2个温度表与表进行比较
我有一个SP,它应该将一个函数生成的两个临时表与另一个表进行比较。我的问题是,它不是单步遍历每个临时表,而是同时遍历两个临时表。我不知道如何编写代码,一次一个地遍历每个表,以获得所需的结果Tsql 步骤至2个温度表与表进行比较,tsql,select,sql-like,Tsql,Select,Sql Like,我有一个SP,它应该将一个函数生成的两个临时表与另一个表进行比较。我的问题是,它不是单步遍历每个临时表,而是同时遍历两个临时表。我不知道如何编写代码,一次一个地遍历每个表,以获得所需的结果 DROP PROCEDURE uspJudgments; GO CREATE PROCEDURE uspJudgments @fullName varchar(100), @fullName1 varchar(100) AS BEGIN SELECT * INTO #tmpFullname FRO
DROP PROCEDURE uspJudgments;
GO
CREATE PROCEDURE uspJudgments
@fullName varchar(100), @fullName1 varchar(100)
AS
BEGIN
SELECT *
INTO #tmpFullname
FROM dbo.DelimitedSplit8K(@fullName, ',')
SELECT *
INTO #tmpFullname1
FROM dbo.DelimitedSplit8K(@fullName1, ',')
SELECT *
FROM #tmpFullName
SELECT *
FROM #tmpFullName1
DECLARE @MaxRownum int
SET @MaxRownum = (SELECT MAX(ItemNumber) FROM #tmpFullname)
DECLARE @Iter int
SET @Iter = (SELECT MIN(ItemNumber) FROM #tmpFullname)
DECLARE @MaxRownum1 int
SET @MaxRownum1 = (SELECT MAX(ItemNumber) FROM #tmpFullname1)
DECLARE @Iter1 int
SET @Iter1 = (SELECT MIN(ItemNumber) FROM #tmpFullname1)
DECLARE @Name varchar(25)
DECLARE @Name1 varchar(25)
WHILE @Iter <= @MaxRownum AND @iter1 <= @Maxrownum1
BEGIN
SET @Name = (SELECT Item FROM #tmpFullname WHERE ItemNumber = @Iter)
SET @Name1 = (SELECT Item FROM #tmpFullname1 WHERE ItemNumber = @Iter1)
SELECT *
--INTO #tmpDefSelect
FROM defendants_ALL
WHERE combined_name LIKE '%' + @Name + '%' AND combined_name LIKE '%' + @Name1 + '%';
SET @Iter = @Iter + 1
SET @Iter1 = @Iter1 + 1
END
END
DROP TABLE #tmpFullname
DROP TABLE #tmpFullname1
EXEC uspJudgments @fullName = 'grein,smit', @fullName1 = 'joh,jon,j.'
我需要得到grein-joh,jon,j的所有结果。斯密特,约翰,乔恩,j
目前,上述代码只返回greinjoh和smit,jon。。在我们的数据库中,第一次组合不返回结果,jonathon smith和jon smith分别返回38个结果。如何正确地逐级遍历每个临时表以获得所需的结果?由于迭代@Iter和@iter1的方式,您只能得到grein joh和smith jon的两个组合。您可以同时增加这两个值。您需要这样一个嵌套循环:
declare @start_val integer = @iter1
while @Iter <= MaxRownum
begin
set @iter1 = @start_val
while @iter1 <= @Maxrownum1
begin
set @Name = ...
set @Name1 = ...
...
set @iter1 = @iter1 + 1
end
set @Iter = @Iter + 1
end
或者,如果您仍需要使用,如:
所有SQL都未经测试…最后一个SQL运行良好。我想把事情复杂化,我很感激你的帮助。
select d.*
from defendants_ALL, #tmpFullname t1, #tmpFullname1 t2
where d.combined_name = t1.Item + ' ' + t2.Item
select d.*
from defendants_ALL, #tmpFullname t1, #tmpFullname1 t2
where d.combined_name like '%' + t1.Item + '%'
and d.combined_name like '%' + t2.Item + '%'