2

对于“新记录”网站,我有一个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>
4

1 回答 1

1

如果我错了,请纠正我,但在我看来,您希望@id事物是刚刚插入的行的 ID proceso。至少这似乎来自相应marcador_progreso列的名称 ( proceso_id)。如果我的猜测是正确的,那么您不需要一个名为id. 查询中的@id应该是由 first 插入的行的 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 回答