为什么没有任何问题此代码的工作:差异
drop table t1
select * into t1 from master..spt_values
drop table t1
select * into t1 from master..spt_values
输出
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't1', because it does not exist or you do not have permission.
(2508 row(s) affected)
(2508 row(s) affected)
但是这个代码不:
drop table #t1
select * into #t1 from master..spt_values
drop table #t1
select * into #t1 from master..spt_values
输出
Msg 2714, Level 16, State 1, Line 4
There is already an object named '#t1' in the database.
此代码中表和临时表之间有什么区别?
好问题。为了更好地说明你的观点[这个SQLFiddle](http://sqlfiddle.com/#!3/d41d8/5748)不起作用,但用普通表替换 – RichardTheKiwi
[对行为的解释在这里](http: //sqlblog.com/blogs/michael_zilberstein/archive/2008/08/28/Name-resolution-in-SQL-Server.aspx)对于't1'语句可以延迟编译,但是对于'#' t1' –
正如一边注意“[DROP TABLE和CREATE TABLE不应该在同一批次的同一张表上执行,否则可能会发生意外错误。](http://msdn.microsoft.com/zh-cn/库/ ms173790.aspx)“ –