如何在单引号内创建临时表

时间:2013-01-08 08:56:09

标签: sql-server sql-server-2008 temp-tables

我尝试在单引号内创建一个temptable它显示错误,它无法识别表  #newtable ...它只支持##table(全局临时表),但我不想要一个全局临时表,我只想知道任何人解释它的原因是什么。

 'select coulumn1, column2, column3, ##newtable.columnid as ShipProfile,
        ROW_NUMBER() over (order by Id)as ''RowNumber'' 
 into ##TempProduct 
 from Product 
   left join ##newtable on Product.columnId=##newtable.ColumnId 
 where MerchantId='+CONVERT(varchar(20),@MerchatID) 

2 个答案:

答案 0 :(得分:1)

引用着名的The Curse and Blessings of Dynamic SQL

  

接下来要注意的是动态SQL不是它的一部分   存储过程,但构成了自己的范围。调用一块   动态SQL类似于调用创建的无名存储过程   特设。这有很多后果:

     

...

     
      
  • 无法从动态SQL中创建临时表   调用过程,因为它们在动态SQL退出时被删除。   (比较存储过程中创建的临时表何时消失   退出过程。)​​然而,动态SQL块可以访问   调用过程创建的临时表。
  •   

所以你可以在执行字符串的存储过程中定义临时表(create table #outertemp (col1 INT Primary KEY ...))(字符串本身中不是!)或者你可以在里面使用全局临时表你的动态SQL。

答案 1 :(得分:-1)

您可以在执行字符串的存储过程中定义临时表create table #outertemp (col1 INT Primary KEY ...))(不在字符串本身中!),也可以在动态SQL中使用全局临时表。