试试这样:
exec
('select '+@OrderID+'=OrderID,'+@CurrencyNumber+'=CurrencyNumber,'+@OptionFeatureCode+'=OptionFeatureCode,'+@AtTermTime+'=AtTermTime,'+@StartTime+'=StartTime,'+@PeriodNumber+'=PeriodNumber,'+@Account+'=Account,'+@OptionValue+'=OptionValue,'+@SettlementByUSD+'=SettlementByUSD,'+@SettlementByBase+'=SettlementByBase,'+@SwingType+'=SwingType,'+@FixRate+'=FixRate,'+@SwingRate+'=SwingRate,'+@SquarePremiun+'=SquarePremiun,'+@TS+'=TS from '+@TableName1+' where OrderingID=convert(varchar,'+@OrderingID+')')

解决方案 »

  1.   

    DECLARE @SQL VARCHAR(1000),@SQL1 VARCHAR(1000),@SQL2 VARCHAR(1000),@OID int
      DECLARE @DEL_ERROR INT,@IST_ERROR INT,@IST2_ERROR INT
      DECLARE @OrderID int
      DECLARE @CurrencyNumber varchar(20)
      DECLARE @OptionFeatureCode int
      DECLARE @AtTermTime DateTime
      DECLARE @StartTime DateTime
      DECLARE @PeriodNumber int
      DECLARE @Account varchar(50)  
      DECLARE @OptionValue Decimal(18,4)
      DECLARE @SettlementByUSD bit
      DECLARE @SettlementByBase bit
      DECLARE @SwingType int
      DECLARE @FixRate Decimal(18,4)
      DECLARE @SwingRate Decimal(18,4)  
      DECLARE @TS TimeStamp
    set   @SQL='SELECT '+@OrderID+'=OrderID,'+@CurrencyNumber+'=CurrencyNumber,'+@OptionFeatureCode+'=OptionFeatureCode,'+@AtTermTime+'=AtTermTime,'
                 +@StartTime+'=StartTime,'+@PeriodNumber+'=PeriodNumber,'+@Account+'=Account,'+@OptionValue+'=OptionValue,'+@SettlementByUSD+'=SettlementByUSD,'            + @SettlementByBase+'=SettlementByBase,'+@SwingType+'=SwingType,'+@FixRate+'=FixRate,'+@SwingRate+'=SwingRate,'+@SquarePremiun+'=SquarePremiun,'
                 +@TS+'=TS from '+@TableName1+' where OrderingID='+convert(varchar,@OrderingID)
      EXEC(@SQL)
    ---你沒定義@SquarePremiun
      

  2.   

    我select 出的@OrderID, @CurrencyNumber  是要为下面的insert 语句使用不知这样用是否可以  SET @SQL1='INSERT INTO '+@TableName1+'(OrderID,CurrencyNumber,OptionFeatureCode,AtTermTime,StartTime,PeriodNumber,Account,AccountID,OptionValue,SettlementByBase,SettlementByUSD,SwingType,FixRate,SwingRate)  
               VALUES ('+Convert(varchar,@OrderID)+','+Convert(varchar,@CurrencyNumber)+',10,'+Convert(varchar,@AtTermTime)+','+Convert(varchar,@StartTime)+','+Convert(varchar,@PeriodNumber)+','''+@Account+''','+Convert(varchar,@AccountID)+','+
                      Convert(varchar,@OptionValue)+','+Convert(varchar,@SettlementByBase)+','+Convert(varchar,@SettlementByUSD)+','+Convert(varchar,@SwingType)+','+Convert(Varchar,@FixRate)+','+Convert(varchar,@SwingRate)+')'
      

  3.   

    這樣當然是不行的。
    我經給你的一個例子
    CREATE PROCEDURE Get_Data
    @BID  varchar(50) output
    AS
    declare @str nvarchar(4000)set @str='select @BID =BID from A where  FeeOpted=1'
    exec sp_executesql @str,N' @BID varchar(50) output',@BID output
    GO
    --
    調用存儲過程
    declare @a varchar(50),@str varchar(8000)
    exec Update_Data @a output
    select @a
    --結果
    /*
    100,101   
    */
      

  4.   

    exec sp_executesql 可以返回N个值 吗?按Hopewell_Go(好的在后頭﹗希望更好﹗﹗)的说法,我在下面的insert into a(ID) Values(@a) 这样就可以了吗?
      

  5.   

    --既然查询只是为insert服务,那就直接写在一齐就行了,根本不需要用变量中转DECLARE @SQL VARCHAR(8000)SET @SQL='INSERT INTO '+@TableName1
    +'(OrderID,CurrencyNumber,OptionFeatureCode,AtTermTime,
    StartTime,PeriodNumber,Account,AccountID,OptionValue,
    SettlementByBase,SettlementByUSD,SwingType,FixRate,SwingRate)
    SELECT OrderID,CurrencyNumber,OptionFeatureCode,AtTermTime,
    StartTime,PeriodNumber,Account,OptionValue,SettlementByUSD,
    SettlementByBase,SwingType,FixRate,SwingRate,SquarePremiun,
    TS from '+@TableName1+' where OrderingID='+convert(varchar,@OrderingID)
    EXEC(@SQL)
      

  6.   

    注意insert和select中的列要一一对应,顺序相同
      

  7.   

    谢谢 zjcxc(邹建)  问题解决了!
    但是我想知道一下临时变量的用法了,我一直很奇怪为什么我用exec就没办法把值放到临时变量中,而且在下面的使用中一直是有执行,但没结果,我上面那种临时变量的用法到底对不对哪?
      

  8.   

    用变量得用sp_executesq,参考 Hopewell_Go(好的在后頭﹗希望更好﹗﹗) 的变量有个作用域问题,sql中没有用户定义的全局变量,只有局部变量,exec是另一个作用域,所以你的方法当然不行.