数据库中存储过程的自动化生成
2006-07-23 11:17:31 来源:WEB开发网核心提示: EXECUTE 或者 EXEC 实际上有两种功能:它可以执行一个存在的存储过程和动态执行一个保存在一个字符串中的 SQL 命令,正是后一个功能,数据库中存储过程的自动化生成(8),我们将使用取得的元数据的联合来自动创建这些存储过程,一个该过程的简化视图将用需要创建该存储过程的存储过程代码(
EXECUTE 或者 EXEC 实际上有两种功能:它可以执行一个存在的存储过程和动态执行一个保存在一个字符串中的 SQL 命令。正是后一个功能,我们将使用取得的元数据的联合来自动创建这些存储过程。一个该过程的简化视图将用需要创建该存储过程的存储过程代码(使用元数据)填充一个大的 varchar 变量,然后一次性动态执行这个 varchar 变量的内容,创建新的存储过程。
让我们着手测试一个动态 T-SQL 的简单例子:
CREATE PROC prGetAuthor
@au_id char(11)
AS
DECLARE @sExec varchar(8000)
SET @sExec = ''SELECT * FROM authors WHERE au_id = '''''' + @au_id + ''''''''
EXEC (@sExec)
在这个例子中,我们传入 author 的 ID 并将它连接到一个从 author 表获取某个 author 的 SELECT 语句。
我们象下面这样调用这个存储过程:
EXEC prGetAuthor ''123-45-6789''
prGetAuthor 存储过程将创建一个如下的 SQL 语句:
SELECT * FROM authors WHERE au_id = ''123-45-6789''
这个语句将在 EXEC 中执行并返回 ID 为 123-45-6789 的 author。正如你看到的,设计时存储过程将在很高的水平上使用这个特征。
但是我们应注意到这不是动态 T-SQL 推荐的用法。任何时候动态 T-SQL 代码对外部世界是可获得的,这样就存在 SQL 攻击的可能性。我们仅仅使用动态 T-SQ L来实现管理和任务目的,决不会在除系统人员和管理人员之外的任何人可存取的任何存储过程中暴露这个功能。
创建存储过程
更多精彩
赞助商链接