◆某些时候,我们希望直接传递字段名、表名、...... 某些时候,我们希望直接传递字段名、表名、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 分页。 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 01:35 , Processed in 0.133761 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.