数据库中存储过程的自动化生成
2006-07-23 11:17:31 来源:WEB开发网核心提示: SELECT @nIndexID = indidFROMsysindexesWHEREid = @nTableIDANDindid BETWEEN 1 And 254AND(status & 2048) = 2048ORDER BY indidIF (@nIndexIDIs Null)RE
SELECT @nIndexID = indid
FROM sysindexes
WHERE id = @nTableID
AND indid BETWEEN 1 And 254
AND (status & 2048) = 2048
ORDER BY indid
IF (@nIndexID Is Null)
RETURN 0
现在将这个表的主键索引的索引 ID 赋予变量 @nIndexID。状态列的第12位(2048)指示是否是主键索引。如果不是主键,则没有记录被返回,并将 @nIndexID 设置为空值。如果退出函数时@nIndexID 包含一个空值,返回0值。换句话说,如果没有主键索引,那么列就不是主键的一部分。现在我们再次在主键索引列的列表中检查要求的列 (@sColumnName)。IF @ColumnName IN
(SELECT sc.[name]
FROM sysindexkeys sik
INNER JOIN syscolumns sc ON sik.id = sc.id AND sik.colid =
sc.colid
WHERE sik.id = @nTableID
AND sik.indid = @nIndexID )
BEGIN
RETURN 1
END
RETURN 0
END
用前面获得的 IndexID,我们从 syscolumns 和 sysindexkeys 的联合中获得列名。这些表通过列 ID 和对象 ID 进行联合。通过 WHERE 从句设置检索条件,因此我们可以只选择要求的表的索引列(sik.id = @nTableID),并且仅仅选择主键索引(sik.indid = @nIndexID)。如果 @sColumnName 在返回的列的列表中,返回值1,否则,返回值0,标识匹配没有找到。
列的默认值
当某条记录被插入到表中,如果不给某一指定列提供值,同时该列有一默认值的话,则该默认值将作为该列的值。由于新产生的表插入存储过程有一个参数是用于所有可能被插入的列,同时变量必须包括一个值,即使是一个空值,该表的默认值不会被使用。本质上,通过明确为每一列提供值(即使是 NULL),我们将改写列的默认值。为了中和我们所创建的存储过程这个特性,我们必须在插入数据时提供默认值。在本文后面我们将看到如何在自动化存储过程中使用默认值。但是现在,让我们首先来考察如何获得那些默认值。
更多精彩
赞助商链接