我受困于以下存储过程,在其中似乎无法使IF EXISTS
和DROP
部分正常工作,导致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
答案 0 :(得分:1)
我通常使用if object_id('databaseB.dbo.TableA') is not null
而不是存在检查,以避免必须完全限定sys.objrcts。