我創建了一個表,並添加了幾行。這是腳本。簡單的列更新使用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
的列。這當前爲空。
我需要使用遊標更新此列YearlySalary
列。所以對於第一和第二排,應該是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
@Rihana。 。 。如果你的遊標代碼使用'update'而不是'insert',這將會有所幫助。但是,如果你想在遊標適當的地方出現問題,可以考慮動態SQL的問題。例如,創建一個包含視圖定義的表格,並循環遍歷表格以定義視圖。 –