如果存在...。DROP在存储过程中不起作用

时间:2018-09-04 01:50:28

标签: sql-server tsql stored-procedures

我受困于以下存储过程,在其中似乎无法使IF EXISTSDROP部分正常工作,导致SELECT INTO部分失败。

数据库A和数据库B都在同一台服务器上,我在这两个数据库中都具有完全权限。存储过程在数据库A中。

我从某个地方(不记得在哪里)复制了IF EXISTS语法,所以我不太了解它的结构。我收集的问题出在IF EXISTS语句中,因为当我尝试执行存储过程的IF EXISTS组件时,如果我在以下位置的左上角下拉框中选择了DatabaseB,则会得到一些信息Management Studio,但是如果我在其中选择了DatabaseA,那么我什么也没得到。

我还尝试在DatabaseA中运行类似结构的存储过程(其中有IF EXISTS和DROP语句指向DatabaseB,后跟SELECT INTO from DatabaseA into DatabaseB),我之前有一些工作,而其他一些则失败。我似乎无法查明是什么导致它有时不能工作。

USE [DatabaseA]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--DROP TABLE A if exists--
IF EXISTS (SELECT * FROM sys.objects  
           WHERE object_id = OBJECT_ID(N'DatabaseB.dbo.TableA') AND type IN (N'U'))
    DROP TABLE DatabaseB.dbo.TableA

--Select INTO TableA on DatabaseB--
SELECT *
INTO DatabaseB.dbo.TableA
FROM DatabaseA.dbo.TableA

1 个答案:

答案 0 :(得分:1)

我通常使用if object_id('databaseB.dbo.TableA') is not null而不是存在检查,以避免必须完全限定sys.objrcts。