已经存在一个名为“##Temp”的对象;在数据库中

发布于 2024-09-13 19:51:45 字数 189 浏览 9 评论 0原文

我在 SQL Server 2000 上有一个存储过程。它包含:
选择...进入##Temp ...
...
drop table ##Temp

当我第二次用ADO运行存储过程时,提示:
数据库中已有一个名为“##Temp”的对象。
谁能好心告诉我出了什么问题吗?

I have a stored procedure on SQL Server 2000. It contains:
select ... into ##Temp ...
...
drop table ##Temp

When I run the stored procedure with ADO a second time, it prompts:
There is already an object named '##Temp' in the database.
Could anyone kindly tell me what's wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

拧巴小姐 2024-09-20 19:51:45

您应该重写存储过程以删除临时表(如果存在),那么您就不会遇到此问题

IF (SELECT object_id('TempDB..##Temp')) IS NOT NULL
BEGIN
    DROP TABLE ##Temp
END

You should re-write your stored proc to drop the temp table if it exists, then you won't ever have this issue

IF (SELECT object_id('TempDB..##Temp')) IS NOT NULL
BEGIN
    DROP TABLE ##Temp
END
千年*琉璃梦 2024-09-20 19:51:45

您正在使用全局临时表,如表名称开头的 ## 所示。这意味着多个会话可以访问该表。

您可能打开了一个连接来创建该表,但未能删除它。您确定第一次 ADO 运行实际上删除了该表吗?是否失败了,或者过程中的流程控制是否跳过了 drop 语句?

您可能想要在 SQL Server 企业管理器中测试该过程以查看它是否报告任何错误。

You are using a global temp table as indicated by the ## at the beginning of the table name. This means multiple sessions can access the table.

It's likely that you have a connection open that created the table, but failed to drop it. Are you sure that the first ADO run actually drop the table. Could it have failed, or did the flow control in the procedure skip the drop statement?

You may want to test the procedure in SQL Server Enterprise Manager to see if it reports any errors.

乖乖公主 2024-09-20 19:51:45

由于您选择使用全局临时表##Temp,因此它在任何给定时间对所有 SQL 连接都是可见的。显然,当存储过程为一个连接运行时,第二个连接进入并尝试创建另一个 ##Temp 但它已经存在......

使用连接本地 #Temp 表(只有一个 #)。

Since you chose to use a global temporary table ##Temp, it is visible to all SQL connections at any given time. Obviously, while the stored proc is running for one connection, a second connection comes in and tries to create yet another ##Temp but that already exists....

Use connection-local #Temp tables (only one #) instead.

漫漫岁月 2024-09-20 19:51:45

哦,都是我的错。我错误地通过一个连接呼叫了 SP 两次。
这就是为什么第二次调用时总是报错。
当然,看了我的描述你不会知道这一点。对不起各位...

Oh, it's all my fault. I called the SP twice through one connection by mistake.
That's why it always reports error when being called the second time.
Of course you won't know that by reading my description. Sorry guys...

过气美图社 2024-09-20 19:51:45

对我来说这个解决方案有效:

IF (SELECT object_id ='#Temp') IS NOT NULL
BEGIN
   DROP TABLE #Temp
END

For me this solution works :

IF (SELECT object_id ='#Temp') IS NOT NULL
BEGIN
   DROP TABLE #Temp
END
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文