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

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航