【问题标题】:How to use loops inside a stored procedure如何在存储过程中使用循环
【发布时间】:2015-03-19 11:35:23
【问题描述】:

我有一个数据表,它作为参数传递给 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 

【问题讨论】:

    标签: sql-server-2008 c#-4.0 stored-procedures datatable


    【解决方案1】:

    我认为您在这里不需要循环。通过查看您的数据,您可以尝试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)
    

    【讨论】:

    • 让我试试你的解决方案。谢谢。
    【解决方案2】:

    试试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
    

    【讨论】:

      猜你喜欢
      • 2020-04-25
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2016-12-03
      • 2011-06-23
      • 2015-01-19
      • 1970-01-01
      相关资源
      最近更新 更多