对于“新记录”网站,我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>
答案 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
列的最后一个值。