一个SqlDataSource上有多个INSERT语句

时间:2012-07-06 03:16:21

标签: asp.net sql sql-server webforms

对于“新记录”网站,我FormView附加了SqlDataSource。用户输入数据,InsertCommand具有SQL INSERT语句。问题是我想在初始化时做其他查询,这些查询涉及其他表。

基本上我想在用户点击“插入”按钮时执行所有这些查询。 第一个INSERT从输入表单中获取值,但其他三个始终相同。

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>

1 个答案:

答案 0 :(得分:1)

如果我错了,请纠正我,但在我看来,您希望@id是刚刚插入proceso的行的ID。至少这似乎是从相应的marcador_progreso列的名称(proceso_id)开始的。如果我的猜测是正确的,那么您不需要名为id参数。查询中的@id应该是由第一个INSERT插入的行的ID初始化的本地变量

如果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列的最后一个值。