我尝试在单引号内创建一个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)
答案 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中使用全局临时表。