频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

存储过程里动态生成包含SQL语句字符串

来源: 作者: 出处:巧巧读书 2007-12-14 进入讨论组

  某些时候,我们希望直接传递字段名、表名、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://www.qqread.com/network/server/y343178181.html 更多文章 更多内容请看存储过程网络存储—光纤通道服务器存储专栏专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章