0
を更新するための手順/カーソルを保存変更:は、私は次のストアドプロシージャ持つテーブル
CREATE PROC FilmLength
AS
BEGIN
DECLARE @Name CHAR(40) ,@Minutes INT
DECLARE Filmcursor CURSOR
FOR (SELECT FilmName, FilmRunTimeMinutes from tblFilm)
OPEN filmcursor
FETCH NEXT FROM filmcursor INTO @Name, @Minutes
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF @Minutes < 120 PRINT (@Name + 'is a SHORT film')
ELSE IF @Minutes <150 PRINT (@Name + 'is a MEDIUM Length film')
ELSE PRINT (@Name + 'is a LONG film')
FETCH NEXT FROM filmcursor INTO @Name, @Minutes
END
CLOSE filmcursor
DEALLOCATE filmcursor
END
代わりの印刷を、私はそれが同じテーブルの列への短期、中期、長期のラベルを更新し、追加する必要がありますDurationという名前です私はSETにPRINTを変更しようとしましたが、それは通過しません。
これは私が使用していたものですが、それは通過しませんでした。私は(彼らは眉をひそめている)あなたのテーブルについて私に言ってきたし、それが列何に基づいて、カーソルを必要としない、
USE Movies
GO
ALTER PROC FilmLength
AS
BEGIN
DECLARE @Minutes INT, @Duration Char(6)
DECLARE Filmcursor CURSOR
FOR (SELECT FilmRunTimeMinutes, Duration from tblFilm)
OPEN filmcursor
FETCH NEXT FROM filmcursor INTO @Name, @Minutes
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF @Minutes < 120 SET @Duration = 'SHORT'
ELSE IF @Minutes <150 SET @Duration = 'MEDIUM'
ELSE SET @Duration = 'LONG'
FETCH NEXT FROM filmcursor INTO @Name, @Minutes
END
CLOSE filmcursor
DEALLOCATE filmcursor
END
これは私のために通っていないようでした。 –
私の質問に多くの情報を追加しました。あなたのtblfilmテーブルの列名を知らなくても、私はちょうど推測しているので、コードを書くのは難しいです。 Peaseは、tblfilmの列のリストを提供します。 – Shaun
別の考えでは、tblfilmに格納されている値を更新する必要があると言いました。これを複数回実行すると、値に「short、medium、Long」を追加し続けることになります。すでにこれらを更新しました。例えば、あなたのSPは日付を取り、XXXより大きい日付の値のみを更新するか、更新を実行した後にdatetime値を保持するupdatedwhenという名前の列があります。これがnullの場合はレコードを更新しますnullの場合は、nullでないレコードをスキップします。それは理にかなっていますか? – Shaun