2015-03-19 48 views
0

我有一个数据表,它传递给StoredProcedure作为参数,我想在存储过程中为数据表中的每一行执行查询。如何在存储过程中使用循环

datatable: 
Value  
000011% 
000012% 
000013% 
000014% 
000015% 
000016% 

Query goes like this: 
SELECT * FROM Test T 
     INNER JOIN Sample S ON T.TestId=S.SampleID 
     WHERE Title like'000011%' //This value will change for each datatbale row value 

回答

0

我不认为你需要在这里循环。通过查看您的数据,您可以尝试使用LEFT()函数。

SELECT * 
FROM Test T 
     INNER JOIN Sample S ON T.TestId = S.SampleID 
WHERE LEFT(Title, 6) IN (SELECT LEFT(Value, 6) FROM ParaTable) 
+0

让我来试试你的solution.Thank你。 – Lalita 2015-03-19 11:57:55

0

尝试CROSS JOIN

DECLARE @DT TABLE(V NVARCHAR(MAX)) 
DECLARE @T TABLE(Title NVARCHAR(MAX)) 

INSERT INTO @DT VALUES 
('000011%'), 
('000012%'), 
('000013%'), 
('000014%'), 
('000015%'), 
('000016%') 

INSERT INTO @T VALUES 
('000011123'), 
('00001112345'), 
('000012123'), 
('000012123678'), 
('000013ABC'), 
('DEF'), 
('GHI') 

SELECT * FROM @DT dt 
CROSS JOIN @T t 
WHERE t.Title LIKE dt.V 

输出:

V  Title 
000011% 000011123 
000011% 00001112345 
000012% 000012123 
000012% 000012123678 
000013% 000013ABC 

应用于查询:

SELECT * FROM Test T 
     INNER JOIN Sample S ON T.TestId=S.SampleID 
     CROSS APPLY datatable dt 
     WHERE Title like dt.Value