SQL Server 2005错误
为什么你不能这样做,是否有解决方法?SQL Server 2005错误
你得到这个错误。
Msg 2714,Level 16,State 1,Line 13 数据库中已经有一个名为'#temptable'的对象。
declare @x int
set @x = 1
if (@x = 0)
begin
select 1 as Value into #temptable
end
else
begin
select 2 as Value into #temptable
end
select * from #temptable
drop table #temptable
这是一个两部分的问题,而凯夫费尔奇尔d为他完全忽略第一个问题的第二个问题提供了很好的答案 - 为什么会产生错误?
答案在于预处理器的工作方式。这
SELECT field-list INTO #symbol ...
被解析成解析树是直接等同于
DECLARE #symbol_sessionid TABLE(field-list)
INSERT INTO #symbol_sessionid SELECT field-list ...
这把#符号到局部范围的名称表。具有_sessionid的业务是为每个用户会话提供一个私有名称空间;如果您指定了两个哈希(##符号),则会禁止此行为。对sessionid扩展的调用和解除是(透彻)透明的。
所有这些的结果是多个INTO#符号条款在同一范围内产生多个声明,导致消息2714.
我会猜测问题是您还没有创建#temptable。
对不起,我不能更详细的,但因为你甚至没有试图解释你所看到的,你得到的不是恒星的答案。
你不能这样做,因为延迟名称解析的,你可以用一个真正的表做到这一点,就掏出英镑迹象
你也可以先创建顶部的临时表,然后做一个普通插入表
从代码的外观看来,你似乎可能已经在SQL Studio或类似的原型这样做吧?我可以猜测你已经运行了几次,并且已经达到了创建#temptable的阶段,但是在它结束之前失败了,并且再次丢弃了这个表格?重新启动您正在使用的SQL编辑工具,然后重试。
第一步...检查表是否已经存在...如果存在,请将其删除。接下来,明确创建表格,而不是使用SELECT INTO ...
您会发现它更可靠。
IF OBJECT_ID('tempdb..#temptable', 'U') IS NOT NULL
BEGIN
DROP TABLE #temptable
END
CREATE TABLE #temptable (Value INT)
declare @x int
set @x = 1
if (@x = 0)
begin
INSERT INTO #temptable (Value) select 1
end
else
begin
INSERT INTO #temptable (Value) select 2
end
select * from #temptable
drop table #temptable
此外,希望的表和字段名称被简化为您的例子,是不是你真的叫他们;)
- 凯文飞兆半导体