###前提・実現したいこと
ストアドプロシージャの勉強中です。
下記サイトのコードを作成し、実行したのですが、エラーが発生してしまいます。
http://www.atmarkit.co.jp/ait/articles/0209/12/news001.html
(処理内容はEmployeesテーブルから、各月ごとに誕生日を迎える社員を表示する処理になっています。)
エラーの発生原因と解決方法を教えてください。
###発生している問題・エラーメッセージ
メッセージ 16916、レベル 16、状態 1、プロシージャ SelectBirthdayMonth、行 48
名前 'EmployeeBirhtday' のカーソルは存在しません。
メッセージ 16916、レベル 16、状態 1、プロシージャ SelectBirthdayMonth、行 49
名前 'EmployeeBirhtday' のカーソルは存在しません。
(エラーメッセージからカーソルが上手く作成できていいないのかなと
推測はしているのですが。。。)
###ソースコード
【エラーが発生するストアドプロシージャ】
1 CREATE PROCEDURE [dbo].[SelectBirthdayMonth] AS
2 BEGIN
3 --変数とカーソルの宣言
4 DECLARE @EmployeeName NVARCHAR(10)
5 DECLARE @BirthDate DATETIME
6 DECLARE @Counter INT
7
8 DECLARE EmployeeBirthday CURSOR FOR
9 SELECT FirstName + LastName As EmployeeName,BirthDate
10 From Employees
11
12 --一時テーブルの作成
13 CREATE TABLE #Calendar
14 (BirthMonth INT PRIMARY KEY,
15 Employees NVARCHAR(100))
16
17 --初期化処理
18 SET NOCOUNT ON --
19
20 SET @Counter = 1
21 WHILE @Counter < 13
22 BEGIN
23 INSERT INTO #Calendar(BirthMonth,Employees)
24 VALUES(@Counter,'')
25 SET @Counter = @Counter + 1
26 END
27
28 --メイン処理
29 OPEN EmployeeBirthday
30
31 FETCH NEXT FROM EmployeeBirthday
32 INTO @EmployeeName,@BirthDate
33
34 WHILE @@FETCH_STATUS = 0
35 BEGIN
36 UPDATE #Calendar
37 SET Employees = Employees + @EmployeeName
38 + '(' + CAST(DAY(@BirthDate) AS NVARCHAR(2)) + ')'
39 WHERE BirthMonth = MONTH(@BirthDate)
40
41 FETCH NEXT FROM EmployeeBirthday
42 INTO @EmployeeName,@BirthDate
43 END
44
45 SELECT * FROM #Calendar
46
47 --終了処理
48 CLOSE EmployeeBirhtday
49 DEALLOCATE EmployeeBirhtday
50 END
【データベース】
テーブル名:Employees
列の定義:
列名 データ型
EmployeeID int
FirstName nvarchar(5)
LastName nvarchar(5)
BirthDate datetime
登録データ:
EmployeeID FirstName LastName BirthDate
1 あ い 2016-01-01 00:00:00.000
2 う え 2016-01-02 00:00:00.0003
3 か き 2016-02-04 00:00:00.000
###補足情報(言語/FW/ツール等のバージョンなど)
SQL Server2008 R2
Microsoft SQL Server Management Studio 10.50.2500.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。