江西广告网

标题: 存储过程里动态生成包含SQL语句字符串 [打印本页]

作者: 一丰    时间: 2009-1-22 16:54
标题: 存储过程里动态生成包含SQL语句字符串
  某些时候,我们希望直接传递字段名、表名、where条件甚至 SQL 语句本身等字符串到存储过程,在存储过程里将不同的参数值组合成不同的 SQL 语句执行,Microsoft SQL Server 提供两种方法实现这个目的。      一、使用 sp_executesql 系统存储过程执行 Unicode 字符串   1、直接组合 SQL 语句执行   CREATE PROCEDURE p_Test1   @TableName varchar(20)   AS   declare @SQLString nvarchar(200)   set @SQLString = N'select * from ' @TableName   EXECUTE sp_executesql @SQLString   2、SQL 语句里包含嵌入参数   CREATE PROCEDURE p_Test2   @TableName varchar(20),   @UserID int,   @UserName varchar(50)   AS   declare @SQLString nvarchar(200)      set @SQLString = N'select * from '   @TableName   N' where UserID=@UserID or UserName=@UserName'      EXECUTE sp_executesql @SQLString,   N'@UserID int, @UserName varchar(50)',   @UserID, @UserName      这也是 Microsoft SQL Server 的推荐做法。      二、使用EXECUTE语句执行字符串   CREATE PROCEDURE p_Test3   @TableName varchar(20)   AS   declare @SQLString nvarchar(200)   set @SQLString = N'select * from ' @TableName   EXEC(@SQLString)      以上两种方法支持在运行时生成 Transact-SQL 脚本、存储过程和触发器中的SQL语句。有个遗憾之处则是包含 sp_executesql 或 EXECUTE 语句的批处理不能访问执行的字符串中定义的变量或局部游标,例如,这两种方法就没法用来做传统的 ADO 分页。 <




欢迎光临 江西广告网 (http://bbs.jxadw.com/) Powered by Discuz! X3.2