2017-10-06 5 views
0

테이블을 만들고 행을 거의 추가하지 않았습니다. 여기에 대한 스크립트가 있습니다. 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이라는 열을 하나 더 추가했습니다. 현재 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 

답변

0

나는 혼자 힘으로 일해야한다. 나는 커서를 작은 간단한 예제에 사용하여 나중에 더 힘든 예제에 사용할 수있게하려고했습니다. 내가 일할 수 있었던 방법이 여기에있다. 고마워.

SET NOCOUNT ON 
DECLARE @salary int 
DECLARE @Id int 

DECLARE tempCursor CURSOR STATIC FOR 
    SELECT EmpId, Salary 
    FROM dbo.xEmployee 

OPEN tempCursor 

IF @@CURSOR_ROWS > 0 
BEGIN 
    FETCH NEXT FROM tempCursor INTO @Id, @salary 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     print @salary 

     UPDATE dbo.xEmployee 
     SET YearlySalary = (@salary * 12) 
     WHERE EmpID = @Id; 

     FETCH NEXT FROM tempCursor INTO @Id, @salary 
    END 
END 

CLOSE tempCursor 
DEALLOCATE tempCursor 
SET NOCOUNT OFF 
3

왜 커서를 사용 하시겠습니까? update이 충분하다 것으로 보인다 : 당신은 커서를 피해야한다

update dbo.xEmployee 
    set YearlySalary = Salary * 12; 

설정 기반 작업을 선호한다. 어떤 상황에서는 커서가 필요하지만이 간단한 것은 아닙니다.

+0

커서를 사용하는 일반적인 예를 시도하고 있습니다. 커서를 사용하지 않고도 업데이트가 작동한다는 것을 알고 있습니다. – Rihana

+1

@Rihana. . . 커서 코드가'insert'보다는'update'를 사용하면 도움이 될 것입니다. 그러나 커서가 적절한 위치에서 문제가 발생하면 동적 SQL 행을 따라 뭔가를 생각하십시오. 예를 들어보기의 정의가있는 표를 만들고 표를 반복하여보기를 정의하십시오. –