数据库中存储过程的自动化生成
2006-07-23 11:17:31 来源:WEB开发网当然,我们使用 WHILE 语句来建立一个循环,一直到取得所有的值(@@FETCH_STATUS = 0)。现在我们准备来解析列的信息,并为新存储过程创建关键语句段。
在下一个代码例子中,我们使用游标进行循环,并使用列的元数据信息创建代码。你将注意到有三个变量被修改:@sKeyFields, @sSetClause 和 @sWhereClause。第一个用来为存储过程创建参数列表(包括在 Figure 1 中的 CREATE PRDC 段)。第二个用来设置 Figure 1 中 UPDATE 命令的 SET 语句。最后一个变量用来设置 Figure 1 最后的 WHERE 子句。现在我们来验证代码的第一部分(见 Figure 7 )。
Figure 7 包括了为新的存储过程创建参数列表的代码。第一个IF语句检查是否准备好了将数据加入到变量中。如果已准备好,我们加入一个逗号和一个回车/换行。我们必须正确地结束参数列表中的每一个参数。如果没有检查,我们将会以一个或更多逗号结束。在下一列前加入逗号,就可以防止了这个错误。
下一步,我们加入一个字符和元数据信息的串联,包括一个TAB字符,一个@字符,列的名字,一个空格和列类型的名字。接着我们看是否需要数据类型的其它信息,检查是否需要精度、范围、长度等信息。如果需要,我们另外加入这些在圆括号中的值(如 T-SQL 语法的需要)。
最后,如果该列不是一个 identity 列,并且该列允许空值或是一个时间戳(不允许被更新因为它是被直接自动更新的),接着我们在参数定义中加入"= NULL"。例如,数据库 pubs 中 discounts 表的列是这样的:
discounttype varchar(40),
stor_id char(4) = NULL,
lowqty smallint = NULL,
highqty smallint = NULL,
discount decimal(4, 2)
注意 discounts 表没有主键,将不允许自动生成代码。这些存储过程依赖于主键来确定数据如何被更新。如果没有主键,这个自动化存储过程应当修改,在新的存储过程的 WHERE 语句中使用所有的列,或者查找一个唯一索引列给 WHERE 子句使用。换句话说,如果可能,所有表应当有主键,这是数据库设计的基本原则。
更多精彩
赞助商链接