1つのテーブルから値を取得し、2番目のテーブルに挿入するためのカーソルを作成しています。挿入されるエントリはわずか35です。しかし、私のカーソルは止まらない。 1分経っても止まらない。私は実行を停止する必要があります。 エラーを教えてください。私は、カーソル処理が遅いとは思わないが、他の貢献者が示唆したように、古いスタイルがあなたのselect文に参加SQL ServerのCURSORは停止しません
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[Insert_Details_In_CForm_From_Orders]
as Begin
Declare @CF_B_ID [int],
@CF_Date [date],
@CF_Invoice_No [int],
@CF_Quantity [decimal](18, 2),
@CF_Amount [decimal](18, 2),
@CF_Tax [decimal](18, 2),
@CF_Total_Amount [decimal](18, 2),
@Financial_Year [nvarchar](25),
@Quater [int]
Select @Financial_Year = Financial_Year,
@Quater = Quater
From Company
--Select a.O_B_ID,a.O_B_LR_Datetime,a.O_B_Bill_No,a.Total_Quantity,a.Total_Duty_Plus,a.Total_CST,a.Total_CST_Plus From Orders a , C_Form b where a.CST_TF=1 AND a.O_B_Bill_No!=b.CF_Invoice_No
Declare @CFormCursor CURSOR
SET @CFormCursor = CURSOR FAST_FORWARD
FOR
Select a.O_B_ID as CF_B_ID,
a.O_B_LR_Datetime as CF_Date,
a.O_B_Bill_No as CF_Invoice_No,
a.Total_Quantity as CF_Quantity,
a.Total_Duty_Plus as CF_Amount,
a.Total_CST as CF_Tax,
a.Total_CST_Plus as CF_Total_Amount
From Orders a , C_Form b
where a.CST_TF = 1
AND a.O_B_Bill_No != b.CF_Invoice_No
OPEN @CFormCursor
FETCH NEXT FROM @CFormCursor
INTO @CF_B_ID ,@CF_Date ,@CF_Invoice_No ,@CF_Quantity ,@CF_Amount ,@CF_Tax ,@CF_Total_Amount
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO [dbo].[C_Form] ([CF_B_ID],[CF_Date],[CF_Invoice_No],[CF_Quantity],[CF_Amount],[CF_Tax],[CF_Total_Amount],[Financial_Year],[Quater])
VALUES(@CF_B_ID ,@CF_Date ,@CF_Invoice_No,@CF_Quantity,@CF_Amount,@CF_Tax,@CF_Total_Amount,@Financial_Year,@Quater)
FETCH NEXT FROM @CFormCursor
INTO @CF_B_ID ,@CF_Date ,@CF_Invoice_No ,@CF_Quantity ,@CF_Amount ,@CF_Tax ,@CF_Total_Amount
END
CLOSE @CFormCursor
DEALLOCATE @CFormCursor
End
なぜカーソルが必要なのですか?なぜ単に 'insert ... select'を使わないのですか? –
しかし、私は遅れてどこに遅れているのかを知っておくべきです – Shantnu
また、アーロン・バートランドによるこの記事を読んでください:[習慣の悪い習慣:古いスタイルのジョインを使う](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08 /bad-habits-to-kick-using-old-style-joins.aspx) –