码迷,mamicode.com
首页 > 数据库 > 详细

讨论贴:在sp_executesql 中生成的临时表的可见性

时间:2014-12-11 18:54:43      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   on   数据   div   

首先创建数据表

IF object_id(TestTable) IS NOT NULL
    DROP TABLE TestTable
GO

CREATE TABLE TestTable(id INT IDENTITY(1,1),Info VARCHAR(10))
GO
INSERT TestTable SELECT a
UNION ALL SELECT b
GO

 

然后依次执行以下三个脚本

脚本一:

EXEC(‘SELECT * INTO #temp FROM TestTable‘)
SELECT * FROM #temp

脚本二:

exec SP_EXECUTESQL N‘SELECT * INTO #temp FROM TestTable‘
SELECT * FROM #temp

脚本三:

SELECT * INTO #temp FROM TestTable
EXEC(‘SELECT * FROM #temp‘)

--DROP TABLE #temp

执行后发现只有脚本三是成功的,其他连个脚本执行后都会提示:

Msg 208, Level 16, State 0, Line 2
Invalid object name ‘#temp‘.

他们的不同支出就是sql语句执行的先后顺序,

我的理解是:

对数据库上下文所做的更改只在 exec sp_executesql,或者是exec(‘....‘) 语句结束前有效。

如果临时表在sp_executesql前就生成了,那么它是乐意接收的,如果是先执行了sp_executesql来创建临时表,

当这个语句执行结束后,临时表也随即消失了。

期待听到更权威的解答。。。。。。

讨论贴:在sp_executesql 中生成的临时表的可见性

标签:style   blog   io   ar   color   sp   on   数据   div   

原文地址:http://www.cnblogs.com/wanglg/p/4158167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!