数据库中存储过程的自动化生成
2006-07-23 11:17:31 来源:WEB开发网让我们看一下 alternate 类型和 identity 状态。Syscolumns 状态字段的第8位(128)指示该列是否是一个 identity 列。(这对于了解何时创建 Insert 和 Update 脚本非常重要)。我们的简单公式对这个值实施一个逻辑与 (&),并将该结果包装在 Sign 函数中。如果该位被设置,则意味该列是 identity 列。c.status & 128 将返回值 128 。否则,将返回值 0 。Sign 函数当为正值时返回1,负数时返回 -1,0 值时返回 0。因此,如果列被评估为 identity 列,将返回值 1,否则返回0。
alternate 类型被用来表示该数据类型在定义时是否要求额外的信息(长度、精度或范围)。我们将 character 和 binary 数据类型作为值是 1 的 alternate 类型,decimals 和 numerics 作为2,其它数据类型作为 0。这个值在存储过程用来确定长度、精度和范围是否需要加入到参数定义中。
查找主键列
正如你看到的,查找列的信息并不是很难。查找一个字段是否是主键的一部分稍微要费点力。有一个字段列表是能获取的。但要找到这些字段得在 syscolumns、sysindexes 和 sysindexkeys 表联合中并与我们请求的列进行比较(在 @sColumnName 参数中被传递到 UDF)。因此,查找主键的任务在单独的用户定义函数中较容易完成,因为我们可以将这个工作封装到某个单一的函数调用中。
让我们考察一下这个函数,看看所发生的真相:
CREATE FUNCTION dbo.fnIsColumnPrimaryKey
(@sTableName varchar(128), @sColumnName varchar(128))
RETURNS bit
AS
BEGIN
DECLARE @nTableID int,
@nIndexID int,
@i int
SET @nTableID = OBJECT_ID(@sTableName)
这个函数包含两个参数,表名和列名,如果指定列是表中的主键的一部分,函数将返回一个 bit 标志。我们接着声明一些存储过程中要用到的变量,并且赋予初始值。现在来到有趣的部分:查找主键信息。我们开始为表的主键索引找到索引ID,如下面的代码所示:
更多精彩
赞助商链接