某些时候我们希望直接传递字段名表名where条件甚至 SQL 语句本身等字符串到存储过程在存储过程里将不同的参数值组合成不同的 SQL 语句执行Microsoft SQL Server 提供两种方法实现这个目的
一使用 sp_executesql 系统存储过程执行 Unicode 字符串
直接组合 SQL 语句执行
CREATE PROCEDURE p_Test
@TableName varchar()
AS
declare @SQLString nvarchar()
set @SQLString = Nselect * from + @TableName
EXECUTE sp_executesql @SQLString
SQL 语句里包含嵌入参数
CREATE PROCEDURE p_Test
@TableName varchar()
@UserID int
@UserName varchar()
AS
declare @SQLString nvarchar()
set @SQLString = Nselect * from +
@TableName +
N where UserID=@UserID or UserName=@UserName
EXECUTE sp_executesql @SQLString
N@UserID int @UserName varchar()
@UserID @UserName
这也是 Microsoft SQL Server 的推荐做法
二使用EXECUTE语句执行字符串
CREATE PROCEDURE p_Test
@TableName varchar()
AS
declare @SQLString nvarchar()
set @SQLString = Nselect * from + @TableName
EXEC(@SQLString)
以上两种方法支持在运行时生成 TransactSQL 脚本存储过程和触发器中的SQL语句有个遗憾之处则是包含 sp_executesql 或 EXECUTE 语句的批处理不能访问执行的字符串中定义的变量或局部游标例如这两种方法就没法用来做传统的 ADO 分页