使用exec sp_executesql,参考:
declare @tt int
declare @ss nvarchar(1000)
set @ss=N'select @tt=count(*) from table3'
exec sp_executesql @ss ,N'@tt int output',@tt output
select @tt
declare @tt int
declare @ss nvarchar(1000)
set @ss=N'select @tt=count(*) from table3'
exec sp_executesql @ss ,N'@tt int output',@tt output
select @tt
-----------------------------------------------------------------------
declare @varMenu varChar(20)
DECLARE @SQLString NVARCHAR(500)set @sqlstring=N'SELECT @OutVarMenu=(Rtrim(ltrim(str('+@IVar+')))+Rtrim(ltrim(menuName))+ Char(10)) FROM Menu_PackMonth WHERE (MenuType='+@MenuType+') And (menuID='+@IVar')'set @varMenu=''
execute sp_executesql
@sqlstring,
N'@OutVarMenu varChar(20) output',
@OutVarMenu=@VarMenu output
select @VarMenu
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)/* Build the SQL string once. */
SET @SQLString =
N'SELECT * FROM pubs.dbo.employee WHERE job_lvl = @level'
/* Specify the parameter format once. */
SET @ParmDefinition = N'@level tinyint'/* Execute the string with the first parameter value. */
SET @IntVariable = 35
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@level = @IntVariable
/* Execute the same string with the second parameter value. */
SET @IntVariable = 32
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@level = @IntVariable此 sp_executesql 示例完成的任务与前面的 EXECUTE 示例所完成的相同,但有下列额外优点: 因为 Transact-SQL 语句的实际文本在两次执行之间未改变,所以查询优化器应该能将第二次执行中的 Transact-SQL 语句与第一次执行时生成的执行计划匹配。这样,SQL Server 不必编译第二条语句。
Transact-SQL 字符串只生成一次。
整型参数按其本身格式指定。不需要转换为 Unicode。
declare @sql nvarchar(8000) --一定要是unicode类型
declare @rVarMenu varchar(200) --定义返回值变量set @sql='SELECT @VarMenu=(Rtrim(ltrim(str('+cast(@IVar as varchar)+')))+Rtrim(ltrim(menuName))+ Char(10)) FROM '+@表名变量+' WHERE (MenuType='+cast(@MenuType as varchar)+') And (menuID='+cast(@IVar as varchar)+')'exec sp_executesql @sql,N'@VarMenu varchar(200) output',@rVarMenu output