2

「新記録」サイトのために、私はにFormView添付していSqlDataSourceます。ユーザーがデータを入力すると、InsertCommandSQLINSERTステートメントがあります。初期化の一部として他のクエリを実行したいのですが、これらのクエリには他のテーブルが含まれます。

基本的に、ユーザーが「挿入」ボタンをクリックしたときに、これらすべてのクエリを実行したいと思います。最初のINSERTは入力フォームから値を取得しますが、他の3つは常に同じです。

INSERT INTO proceso (nombreProceso, macroProceso, analista_id)
VALUES (@nombreProceso,@macroProceso,@analista_id)
INSERT INTO marcador_progreso (marcador_id,state,proceso_id) VALUES (1,'False',@id)
INSERT INTO marcador_progreso (marcador_id,state,proceso_id) VALUES (2,'False',@id) 
INSERT INTO marcador_progreso (marcador_id,state,proceso_id) VALUES (3,'False',@id) 

これを実行すると、最初のステートメントが実行されるように見えます(つまり、新しいprocesoレコードが挿入されます)が、他の3つのINSERTは実行されません。これを解決するにはどうすればよいですか?

SqlDataDourceにはidパラメーターが含まれています

 <InsertParameters>
     ... a few parameters...
     <asp:Parameter Name="id" />
</InsertParameters>
4

1 に答える 1

1

間違っている場合は訂正してください。ただし、@idに挿入したばかりの行のIDにしたいようですproceso。少なくとも、それは対応するmarcador_progreso列の名前(proceso_id)に続くようです。私の推測が正しければ、というパラメータは必要ありませid@idクエリ内のは、最初のによって挿入された行のIDによって初期化されたローカル変数INSERTである必要があります。

procesoのIDが整数列の場合は、次のIDENTITYようにスクリプトを変更します。

INSERT INTO proceso (nombreProceso, macroProceso, analista_id)
VALUES (@nombreProceso,@macroProceso,@analista_id);

DECLARE @id int;
SET @id = SCOPE_IDENTITY();

INSERT INTO marcador_progreso (marcador_id,state,proceso_id) VALUES (1,'False',@id);
INSERT INTO marcador_progreso (marcador_id,state,proceso_id) VALUES (2,'False',@id);
INSERT INTO marcador_progreso (marcador_id,state,proceso_id) VALUES (3,'False',@id);

そして、idパラメータを削除します。

この関数は、現在の実行範囲内の任意のテーブルSCOPE_IDENTITY()の列に挿入された最後の値を返します。IDENTITY

于 2012-07-06T07:15:32.377 に答える