int stable,MNumber; //全局变量
EXEC SQL CREATE   Procedure   table_name   
      @tablename   char(10),@ID int
As  exec('insert into ' +@tablename+ ' values(' +@ID+ ',1,1,1,1,1,1,1,1,1,1)'); //AEXEC SQL CREATE Procedure ge_number 
    @table nvarchar(50),
    @cnt int output
AS
   declare @sql nvarchar(100)
   set @sql=N'select @cnt=number into :MNumber from '+@table
   exec sp_executesql @sql ,N'@cnt int output' , @cnt output;  //BEXEC SQL declare @cnt int;
EXEC SQL exec ge_number  table,@cnt output; //C
EXEC SQL EXEC table_name :stable,:MNumber;  //D已经实现了文中A部分表名和某一参数都可以是变量
现在是想在B部分实现一个能去某一个确定的表table中查询其中的Number,并将其赋值给全局变量MNumber,这样再在D部分中就可以实现表名和参数都可以是变量的存储过程:stable,:MNumber
ps.文中C部分是版上某位大侠帮忙的,可能意思理解错了,不需要再在这里表名作变量了,能否将C部分改为EXEC SQL exec ge_number  @cnt output; 就可以运行的呢
不知道我说清楚了没有,谢谢大家了啊
总之,就是想实现如下的效果
EXEC SQL declare @cnt int;
EXEC SQL exec ge_number  @cnt output; 
再让MNumber=cnt
EXEC SQL EXEC table_name :stable,:MNumber;  

解决方案 »

  1.   

    --如何将exec执行结果放入变量中?          
            declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
            declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
            declare @output_result int--查询结果赋给@output_result         set @QueryString='select @totalcount=count(*) from tablename' --@totalcount 为输出结果参数
            set @paramstring='@totalcount int output' --设置动态语句中参数的定义的字符串,多个参数用","隔开
            exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
            select @output_result
            当然,输入与输出参数可以一起使用,大家可以自己去试一试。
            另外,动态语句查询的结果集要输出的话,我只想到以下用临时表的方法,不知各位有没有更好的方法.
            IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判断临时表#tmp是否存在,存在则删除
                drop table #tmp
            select * into #tmp from tablename where 1=2 --创建临时表#tmp,其结构与tablename相同        declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
            set @QueryString='select * from tablename '
            insert into #tmp(field1,field2,...) exec(@querystirng) 
      

  2.   

    大哥啊,其实就是要编两个存储过程实现如下的功能就行了
    EXEC SQL declare @cnt int;
    EXEC SQL exec ge_number  @cnt output; //取出参数
    再让MNumber=cnt   //再将取出的参数赋值给外部变量MNumber
    EXEC SQL EXEC table_name :stable,:MNumber;  //再在另外一个存储过程里面实现表名,参数都是变量的查询