简体   繁体   English

如何在SQL查询中为每种循环类型使用A

[英]How to use a for each loop type in a SQL Query

Is there any way to do some type of loop through an array of strings in SQL? 有什么方法可以通过SQL中的字符串数组进行某种类型的循环吗? I am appending data to #T_POLICY, and I want to run through the queries with one database and the run through the same queries with a different database. 我将数据附加到#T_POLICY,并且我想通过一个数据库运行查询,并通过不同的数据库运行相同的查询。

Ex. 防爆。

use Staging__4SBI_STG_BG
go

WITH cteEnumerate AS
(
    SELECT *
           ,RN = ROW_NUMBER() OVER (PARTITION BY POLICY_ID ORDER BY LOADDATE DESC)
    FROM dbo.STG_POLICY
)
INSERT INTO #T_POLICY
SELECT SOURCE, AGENCY_D, POL_SEQ, POLICY_ID, POL_ENDNUMBER, PRODUCT_ID, 
COMPANY_ID
FROM cteEnumerate
WHERE RN = 1
ORDER BY POLICY_ID; 

So the next one I would like use is use Staging__4SBI_STG_TB instead of BG, and have quite a few others to run through. 因此,我要使用的下一个是使用Staging__4SBI_STG_TB而不是BG,并且还有很多其他需要解决的问题。 Could I create a table with these names and run through them? 我可以用这些名称创建一个表格并运行它们吗? Any help would be great. 任何帮助都会很棒。

Thanks 谢谢

How do you load table dbo.STG_POLICY? 如何加载表dbo.STG_POLICY? You can add a column IsLatestPolicy BIT to the table. 您可以将一列IsLatestPolicy BIT添加到表中。

WITH cte AS (SELECT *
                           ,RN = ROW_NUMBER() OVER (PARTITION BY POLICY_ID ORDER BY LOADDATE DESC)
                      FROM dbo.STG_POLICY
)
UPDATE cte
SET IsLatestPolicy = CASE WHEN RN = 1 THEN 1 ELSE 0 END;

So every time you can select the original table 所以每次您都可以选择原始表格

SELECT SOURCE
      , AGENCY_D
      , POL_SEQ
      , POLICY_ID
      , POL_ENDNUMBER
      , PRODUCT_ID
      , COMPANY_ID
FROM dbo.STG_POLICY
WHERE IsLatestPolicy = 1

Therefore no need to create another table just for initiating a loop. 因此,无需仅为了启动循环就创建另一个表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM