gpt4 book ai didi

sql-server-2008 - 临时表未从数据库中删除

转载 作者:行者123 更新时间:2023-12-01 11:41:38 24 4
gpt4 key购买 nike

我有一个大型查询,从选择 #tmp1 开始。在该选择语句之前,我有以下内容:

USE Sandbox

--if the table exists, we want to delete it first
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = '#tmp1'))
BEGIN
drop table dbo.#tmp1
END

问题是,当我运行整个查询时,我得到一个错误:

Msg 2714, Level 16, State 6, Line 51
There is already an object named '#tmp1' in the database.

如果我突出显示上面的语句并运行它,我得到:

命令成功完成。

但是如果我再次运行查询,我会得到上面的错误。

我也尝试了这两个(结果为“成功完成”,但在尝试运行查询时仍然出现上述错误:

if exists (select * from sys.objects where name = '#tmp1' and type = 'u')
drop table dbo.#tmp1

IF OBJECT_ID('dbo.#tmp1', 'U') IS NOT NULL
DROP TABLE dbo.#tmp1

谁能看出我可能做错了什么?

我总共使用了 4 个临时表,我的大型 SQL 语句结构如下:

USE Sandbox

If #tmp1 exists, drop it
If #tmp2 exists, drop it
If #tmp3 exists, drop it
If #tmp4 exists, drop it

Declare variables

select into #tmp1
select into #tmp2
select into #tmp3
select into #tmp4
select from #tmp1
select from #tmp2
select from #tmp3
select from #tmp4

最佳答案

临时表位于 tempdb 中...但是您当前的代码正在检查该对象是否存在于您的 Sandbox 数据库中。

更改您的代码以使用由 3 部分组成的名称,包括临时表所在的数据库 tempdb:

IF OBJECT_ID('tempdb.dbo.#tmp1', 'U') IS NOT NULL
DROP TABLE dbo.#tmp1

关于sql-server-2008 - 临时表未从数据库中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com