我有一个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