一丰 发表于 2009-1-22 16:54:16

存储过程里动态生成包含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 分页。 <
页: [1]
查看完整版本: 存储过程里动态生成包含SQL语句字符串