テーブルを作成し、それに数行を追加しました。ここにそのスクリプトがあります。CURSORを使用した単純な列の更新
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[xEmployee]
(
[EmpID] [int] NOT NULL,
[EmpName] [varchar](50) NOT NULL,
[Salary] [int] NOT NULL,
[Address] [varchar](200) NOT NULL,
[YearlySalary] [int] NULL,
PRIMARY KEY CLUSTERED ([EmpID] ASC)
) ON [PRIMARY]
GO
INSERT INTO [dbo].[xEmployee] ([EmpID], [EmpName], [Salary], [Address], [YearlySalary])
VALUES (1, N'Mohan', 12000, N'Noida', NULL),
(2, N'Pavan', 25000, N'Delhi', NULL)
GO
あなたが見ることができるように、私はすでに存在Salary
列とそのデータを持っています。私はYearlySalary
という名前の列をもう1つ追加しました。これは現在nullです。
このYearlySalary
列をカーソルで更新する必要があります。したがって、1行目と2行目はYearlySalary = Salary * 12
である必要があります。
以下に示すようにカーソルを使用しようとしています。しかし、何かが行方不明であるか、あるいは正しくない。誰かが私が間違っている場所を教えてもらえますか?
SET NOCOUNT ON
DECLARE @salary int
DECLARE @id int
DECLARE @yearlySalary int
DECLARE tempCursor CURSOR STATIC FOR
SELECT EmpID,Salary, YearlySalary
FROM dbo.xEmployee
OPEN tempCursor
IF @@CURSOR_ROWS > 0
BEGIN
FETCH NEXT FROM tempCursor INTO @salary
WHILE @@FETCH_STATUS = 0
BEGIN
@yearlySalary = @salary * 12
INSERT INTO dbo.xEmployee (EmpId, Salary,YearlySalary)
VALUES (@id, @salary, @yearlySalary)
END
END
CLOSE tempCursor
DEALLOCATE tempCursor
SET NOCOUNT OFF
私はカーソルを使用して通常の例を試しています。私は更新がカーソルを使わずに動作することを知っています – Rihana
@リハナ。 。 。あなたのカーソルコードが 'insert'ではなく' update'を使用していれば助けになります。しかし、カーソルが適切な場所で問題が発生した場合は、動的SQLの行に沿って何かを考えてください。ビューの定義を含む表を作成し、表をループしてビューを定義します。 –