ALTER PROCEDURE [dbo].[sp_Curing_log_data]
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DECLARE @Rdatetime AS Datetime
DECLARE @Barcode AS Varchar(15)
DECLARE @Cavity AS Varchar(5)
DECLARE @IPLH AS Float
DECLARE @IPRH AS Float
DECLARE @ITLH AS Float
DECLARE @ITRH AS Float
DECLARE @PTLH AS Float
DECLARE @PTRH AS Float
DECLARE @SPLH AS Float
DECLARE @SPRH AS Float
DECLARE @MachineID AS Varchar(15)
DECLARE @ShiftID AS Varchar(5)
DECLARE @C_Flag AS Int
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR FAST_FORWARD
FOR
select TOP (10000) * from [10.65.84.4].[CEAT].dbo.Curing_Trend with(NOLOCK) order by Rdatetime asc
OPEN @Mycursor
FETCH NEXT FROM @MyCursor
INTO
@Rdatetime,@Barcode,@Cavity,@IPLH,@IPRH,@ITLH,@ITRH,@PTLH,@PTRH,@SPLH,@SPRH,@MachineID,@ShiftID,@C_Flag
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO dbo.Curing_Trend (Rdatetime, Barcode, Cavity, IPLH, IPRH, ITLH, ITRH, PTLH, PTRH, SPLH, SPRH, MachineID, ShiftID)
values(@Rdatetime,@Barcode,@Cavity,@IPLH,@IPRH,@ITLH,@ITRH,@PTLH,@PTRH,@SPLH,@SPRH,@MachineID,@ShiftID)
Update [10.65.84.4].[CEAT].dbo.Curing_Trend SET C_Flag = 0 where Rdatetime = @Rdatetime and Barcode = @Barcode
FETCH NEXT FROM @MyCursor
INTO @Rdatetime,@Barcode,@Cavity,@IPLH,@IPRH,@ITLH,@ITRH,@PTLH,@PTRH,@SPLH,@SPRH,@MachineID,@ShiftID,@C_Flag
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
Delete from [10.65.84.4].[CEAT].dbo.Curing_Trend where C_Flag =0
END TRY
BEGIN CATCH
EXEC [dbo].[sp_InsertErrorDetails]
Return 2
END CATCH
END
这是我将数据从一台服务器传输到另一台服务器的过程,因为大约有数百万个数据光标无效。在SQL Server中有没有其他的游标的替代方法?
请任何人都可以建议替代方法来代替游标。
在此先感谢
您是在尝试传输整个表格还是仅传输数据的子集? – Greg
Im将100000个数据从一个表格转移到另一个表格。在光标中运行需要很长时间。 –
如果你想传输整个表,然后使用bcp输入/输出。如果您想传输一部分数据,那么PK /集群密钥是什么密钥? – Greg