存储过程里动态生成包含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 分页。
转自:动态网制作指南 www.xue163.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值