本文介紹了一次循環(huán)10條記錄并將其賦值給變量的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有一個(gè)包含900條記錄的表。
我想一次獲得10條記錄,并將其分配給變量。
下次我在SSIS中運(yùn)行For Each循環(huán)任務(wù)時(shí),
它將循環(huán)另外10條記錄并覆蓋變量。
我們將非常感謝您的幫助。
我有這樣的桌子,例如
EMPID
0001
00045
00067
00556
00078
00345
00002
00004
00005
00006
00007
00008
這是要我試過執(zhí)行SQL任務(wù)把900條記錄拉到變量,把執(zhí)行SQL任務(wù)連接到For Each循環(huán),里面For Each循環(huán)有數(shù)據(jù)流任務(wù),源有SQL查詢,目標(biāo)是表。
select * from Dbo.JPKGD0__STP
where EMPID in ?
但這將在1循環(huán)中傳遞每個(gè)Empid,所以我希望每次傳遞10個(gè)Empids。
如果我需要使用不同的方法/或其他任務(wù)來實(shí)現(xiàn)這一點(diǎn),請(qǐng)告訴我。
推薦答案
步驟(1)-創(chuàng)建變量
您必須創(chuàng)建兩個(gè)int類型的變量:
@[User::RowCount]&>類型int
@[User::Counter]&>類型int
@[User::strQuery]>;>;類型字符串
將以下表達(dá)式分配給@[User::strQuery]:
"SELECT EMPID
FROM Dbo.JPKGD0__STP
ORDER BY EMPIDASC
OFFSET " + (DT_WSTR,50)@[User::Counter] + " ROWS
FETCH NEXT 10 ROWS ONLY "
第(2)步-獲取行數(shù)
首先,使用以下命令添加一個(gè)Execute SQL Task:
SELECT Count(*) FROM Dbo.JPKGD0__STP;
并將結(jié)果存儲(chǔ)在@[User::RowCount]變量中(check this link了解詳細(xì)信息)。
第(3)步-For循環(huán)容器
現(xiàn)在,添加一個(gè)For Loop Container,表達(dá)式如下:
InitExpression:@[User::Counter] = 0
EvalExpression:@[User::Counter] < @[User::RowCount]
AssignExpression:@[User::Counter] = @[User::Counter] + 10
在For loop container內(nèi),添加一個(gè)Data flow task,其中包含一個(gè)OLE DB源和一個(gè)目標(biāo)。在OLE DB源中,選擇Access Mode作為SQL Command from variable,然后選擇@[User::strQuery]作為源。
參考資料
Row Offset in SQL Server
SQL Server OFFSET FETCH
SSIS Basics: Using the Execute SQL Task to Generate Result Sets
ORDER BY Clause (Transact-SQL)
這篇關(guān)于一次循環(huán)10條記錄并將其賦值給變量的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,






