使用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

解决方案 »

  1.   

    用sp_executesql,下面一个例子:
    -----------------------------------------------------------------------
    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
      

  2.   

    sp_executesql 支持与 Transact-SQL 字符串相独立的参数值的设置:DECLARE @IntVariable INT
    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。 
      

  3.   

    用动态参数传递:
    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