我有一個table_A從哪裏我從.csv文件導入數據。我想比較table_A中的一些列與table_B,並相應地將數據插入到表中並將狀態更新爲table_A。 我應該用什麼While循環或光標.. PLZ確實表明遊標或while循環什麼將是一個很好的選擇,以處理6,00,000+行數據
DECLARE @A_2 VARCHAR(10), @A_3 VARCHAR(50), @A_4 VARCHAR(100)
DECLARE db_cursor CURSOR FOR
SELECT A_2, A_3, A_4 FROM Temp_table
OPEN db_cursor
FETCH NEXT FROM db_cursor
INTO @A_2, @A_3, @A_4
WHILE @@FETCH_STATUS = 0
BEGIN
If @A_2 <> (SELECT C_2 FROM Table_C where C_2= @A_2)
UPDATE Temp_table SET [Status]='Not Exits in Table_C'
ELSE BEGIN
IF @A_3=(Select B_3 from Table_B where [email protected]_3) AND @A_2=(SELECT B_2 FROM Table_B where B_2= @A_2)
UPDATE Temp_table SET [Status]='Duplicate Row, Already Exists'
ELSE
IF (@A_4 <>'B_4 '+'B_5')
UPDATE Temp_table SET [Status]=' Format is not accepted '
ELSE
INSERT INTO Table_B(B_2, B_3, B_4) VALUES(@A_2, @A_3, @A_4)
END
CLOSE db_cursor DEALLOCATE db_cursor
FETCH NEXT FROM db_cursor INTO @A_2, @A_3, @A_4
END
這裏Temp_table是我將從.csv文件,比較導入數據的表將使用表-B,Table_C的列完成與Temp_Table 它會是正確的方法嗎?
大思維轉變與關係型數據庫是擺脫程序思維了 - 一會兒,curosrs - 並進入思考套。 SQL在比較大量數據和處理數據方面非常出色。擁抱SQL! – n8wrl
也不要使用基於集合的查詢。 – RBarryYoung
位開放式,其他選項可用,取決於您可以使用直接查詢的性能(無需循環或遊標,基於集合的方法會更好),或者如果數據使用SSIS作爲更多線性思維的選項set太大/ perf是一個問題 – Andrew