2012-07-06 54 views
2

对于'新记录'网站,我有一个FormView连接到SqlDataSource。用户输入数据并且InsertCommand具有SQL INSERT语句。问题是我想做其他查询作为初始化的一部分,这些查询涉及其他表。一个SqlDataSource上的多个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

@id是由第一次插入返回的? – 2012-07-06 03:17:50

+0

它是字段中的一个参数。刚刚编辑我的问题来显示它。 – leonsas 2012-07-06 03:23:01

+0

什么错误给你?请告诉我们更多。或者说,一切似乎都很好,而且值不插入? – 2012-07-06 03:25:12

回答

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