【发布时间】:2011-05-03 02:59:58
【问题描述】:
我想将数据从一个表(原始数据,所有列都是 VARCHAR)复制到另一个表(用相应的列格式格式化)。
为了将rawdata 表中的数据复制到formatted 表中,我使用游标来识别受影响的行。我需要在错误日志表中记录该特定行,跳过它,然后继续复制剩余的行。
复制需要更多时间。有没有其他方法可以实现这一目标? 这是我的查询
DECLARE @EntityId Varchar(16) ,
@PerfId Varchar(16),
@BaseId Varchar(16) ,
@UpdateStatus Varchar(16)
DECLARE CursorSample CURSOR FOR
SELECT EntityId, PerfId, BaseId, @UpdateStatus
FROM RawdataTable
--Returns 204,000 rows
OPEN CursorSample
FETCH NEXT FROM CursorSample INTO @EntityId,@PerfId,@BaseId,@UpdateStatus
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
--try insertting row in formatted table
Insert into FormattedTable
(EntityId,PerfId,BaseId,UpdateStatus)
Values
(Convert(int,@EntityId),
Convert(int,@PerfId),
Convert(int,@BaseId),
Convert(int,@UpdateStatus))
END TRY
BEGIN CATCH
--capture Error EntityId in errorlog table
Insert into ERROR_LOG
(TableError_Message,Error_Procedure,Error_Log_Time)
Values
(Error_Message()+@EntityId,’xxx’, GETDATE())
END CATCH
FETCH NEXT FROM outerCursor INTO @EntityId, @BaseId
END
CLOSE CursorSample
DEALLOCATE CursorSampler –cleanup CursorSample
【问题讨论】:
-
你遇到过这个问题吗?
标签: sql sql-server tsql cursor