之前没有使用动态参数,现在想搞成使用动态参数insert into @OrderTable select * from dbo.Order_Basicinfo as a where exists (select TID from  @table as b where a.TID=b.TID);
select * from  @OrderTable   
select * from dbo.Promotion_Detail as a where exists (select id from   @OrderTable as b where a.ID=b.OrderID);
现在想搞成这样子:declare @sql nvarchar(500);
set @sql='select * from  @OrderTable  select * from dbo.Promotion_Detail as a where exists (select id from   '+@OrderTable+' as b where a.ID=b.OrderID);'
exec(@sql)报错说@OrderTable必须声明标量变量,问题是我在之前已经声明了

解决方案 »

  1.   

    DECLARE @OrderTable NVARCHAR(128)='test'
    declare @sql nvarchar(500);
    set @sql='select * from  '+@OrderTable+'  select * from dbo.Promotion_Detail as a where exists (select id from   '+@OrderTable+' as b where a.ID=b.OrderID);'
    print(@sql)先print出来,如果是你想要的才把print改成exec
      

  2.   


    declare @sql nvarchar(500);
    set @sql='select * from  ' + @OrderTable + '  select * from dbo.Promotion_Detail as a where exists (select id from   '+@OrderTable+' as b where a.ID=b.OrderID);'
    exec(@sql)
      

  3.   


    declare @sql nvarchar(500);
    set @sql='select * from  '+@OrderTable+' select * from dbo.Promotion_Detail as a where exists (select id from   '+@OrderTable+' as b where a.ID=b.OrderID);'
    exec(@sql)
      

  4.   

    带动态参数的SQL,应该用 sp_executesql,而不是 exec
    但你现在的情况适合不,不清楚,你的参数是表变量。
      

  5.   

    是的@sql声明为nvarchar,而@OrderTable是表,所以3楼4楼给的都不对,那跟我写的有什么区别?我想的是是否可以把@OrderTable在@sql中声明
      

  6.   

    是的@sql声明为nvarchar,而@OrderTable是表,所以3楼4楼给的都不对,那跟我写的有什么区别?我想的是是否可以把@OrderTable在@sql中声明1楼的可以不?