2016-11-07 8 views
-1

にこのクエリを回す:は、これは私が今持っているものですが、私はまだエラーを受け付けておりますカーソル

メッセージ16916、レベル16、状態1、行239 名でカーソルを「sumCurSalaryActiveEmps」ん存在しない。
メッセージ16917、レベル16、状態2、行258 カーソルが開いていません。
メッセージ16916、レベル16、状態1、行266 'sumCurSalaryActiveEmps'という名前のカーソルは存在しません。
メッセージ16916、レベル16、状態1、行267 'sumCurSalaryActiveEmps'という名前のカーソルが存在しません。

DECLARE @sumCurSal decimal(10,2) 
DECLARE sumCurSalaryActiveEmp CURSOR Local FAST_FORWARD FOR 
SELECT 
SUM(Salary.Emp_Salary) AS 'Sum of All Current Salaries' 

    FROM 
    (
    SELECT 

     MAX(Emp_Salary_Change_Year) AS "Change Year" 
     FROM Employee_Details AS e 

    INNER JOIN Country AS co ON e.Emp_Country_Id = co.Country_Id 
    INNER JOIN State AS s ON e.Emp_State_Id = s.State_Id 
    INNER JOIN Designation AS d ON e.Desig_Id = d.Desig_Id 
    INNER JOIN Salary AS sa ON e.Emp_Id = sa.Emp_Id 
    WHERE Emp_Active = 1 
    GROUP BY Emp_First_Name, Emp_Last_Name, 
    Emp_Middle_Name, Country_Name, Desig_Name) AS C 
    INNER JOIN Salary ON C.[Change Year] = Salary.Emp_Salary_Change_Year 
    OPEN sumCurSalaryActiveEmps 
    Fetch NEXT FROM sumCurSalaryActiveEmp 
    INTO @sumCurSal 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     Fetch NEXT FROM sumCurSalaryActiveEmps 
      INTO @sumCurSal 
      END 
    close sumCurSalaryActiveEmps 
    Deallocate sumCurSalaryActiveEmps 
+1

あなたは**のコストを避けて**カーソルを作成して使用することを忘れてはなりません! –

+3

あなたは何を達成しようとしていますか? 1行しか得られないように見えます。すべての給与の合計。なぜカーソルが必要ですか? –

+2

SQL ServerはOracleではありません。カーソルを99.99999%の時間使用しないでください。あなたは "私は決してカーソルを使うべきではありません"と読むべきです。あなたもこの記事を見逃してしまった:http://www.dotnettricks.com/learn/sqlserver/sql-server-basics-of-cursors – granadaCoder

答えて

0

私はあなたが一般的でカーソルを使用してはならないと述べた全ての人々に同意します。あなたが本当に本当に本当に必要なのは1%以下です。しかし、あなたの質問に答えるために、これはあなたがカーソルのために利用できるテンプレートです。

Declare sumCurSalaryActiveEmp Cursor Local Fast_Forward For 
    -- Your select statement here. For each column selected you need a corresponding variable to FETCH into 

Open sumCurSalaryActiveEmp 
Fetch Next From sumCurSalaryActiveEmp 
    Into @sumCurSal -- YOU DECLARE These to match up to your select 

While @@FETCH_STATUS = 0 
    Begin 
    -- Do your stuff here 
    Fetch Next From sumCurSalaryActiveEmp 
     Into @sumCurSal 
    End 

Close sumCurSalaryActiveEmp 
Deallocate sumCurSalaryActiveEmp 

特定のコードでは、OPEN文の前にキーワードGOを削除する必要があります。

関連する問題