Chinaunix首页 | 论坛 | 博客
  • 博客访问: 337393
  • 博文数量: 1051
  • 博客积分: 53280
  • 博客等级: 大将
  • 技术积分: 6670
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 13:21
文章分类

全部博文(1051)

文章存档

2011年(1)

2008年(1050)

我的朋友

分类:

2008-09-09 15:46:40


  某些时候,我们希望直接传递字段名、表名、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 分页。
【责编:admin】

--------------------next---------------------

阅读(116) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~