万卷书   首页 > 电脑书籍 > Dreamweaver > Ultradev专题使用存储过程给子表格增加多个记录
 

总体解释

   我们使用存储过程来插入数据,因为我们要插入记录到两个表格(Jobs和JobCategory)中去。当用户在AddJobs.htm表单中点击Add Job (增加工作)按钮,它将作为Request(请求)变量发送所有的表单数值给AddConfirm.htm页面。当网页装载时候这个commJobAdd存储过程运行。可以利用Request变量和使用信息来插入数据到Jobs表格中。

   Jobs表格使用JobID作为主键区域。SQL Server 7用一个特殊数据库数值,即@@标识,它等于主键区域的数值,可以用于新插入记录。这个存储记录使用@@标识数值作为JobID。

   你会注意到我们也创建了存储过程来传递一个OUTPUT数值给@JobID,@JobID示新插入工作记录的JobID数值。这个JobID数值首先传递给spJobSearch存储过程(这个过程集中了rsJobSearch记录集),同时传递给spJobCategories存储过程(这个过程集中了rsJobCategories记录集)并且显示所有的新增工作信息给用户。

存储过程

commJobAdd

   对于那些熟悉存储过程的人会注意到只需对在教程2中我们使用的存储过程做一小部分改变。

   这里我们定义@CategoryID 和 @PopulationID作为字符,因为我们要传递多选列表给存储过程。如果用户只选择列表中的一项,它将传递2(假如2是CategoryID)。如果多项被选择,它将
发送一个逗号相隔的列表,如“2,3,5”。虽然CategoryID区域示一个整数,我们必须将数值
转换为字符,这样它就可以通过存储过程正确的传送。我们创建一个动态SQL语句是为了正确
分列CategoryID。我们创建一个新变量@CatInsert作为动态SQL语句并且执行这个语句。SQL允
许当你有多行要插入时可以使用INSERT...SELECT语句,

代码如下:

DECLARE @CatInsert varchar(2000) -- Declare a new variable for the dynamic SQL
statement

SET @CatInsert = 'INSERT INTO JobCategory (JobID, CategoryID) SELECT ' +
CONVERT(varchar,@JobID) + ', Category1ID From CategoryType Where Category1ID IN ('
+ @CategoryID + ')' -- Create a SELECT statement that includes the new JOBID and
compares whatever is in @CATEGORYID list with against the values in the
CategoryType Lookup table.


如果你只选择了列表框中的一个数值,你将就只得到一行插入到JobCategory表格:

@JobID Value @CategoryID Value
2 3


如果你只选择了列表框中的一个数值,你将就只得到一行插入到JobCategory表格:

@JobID Value @CategoryID Value
2 3
2 4
2 5

上一页 下一页