ЕСЛИ СУЩЕСТВУЕТ .... DROP не работает в хранимой процедуре - PullRequest
0 голосов
/ 04 сентября 2018

Я застрял в следующей хранимой процедуре, в которой я не могу заставить работать детали IF EXISTS и DROP, что приводит к сбою в детали SELECT INTO.

И база данных A, и база данных B находятся на одном сервере, у меня есть полные разрешения в обеих базах данных. Хранимая процедура находится в базе данных A.

Я скопировал синтаксис IF EXISTS откуда-то (не могу вспомнить, где), поэтому я не совсем понимаю его структуру. Я понял, что проблема заключается в операторе IF EXISTS, потому что, когда я пытаюсь выполнить компонент IF EXISTS хранимой процедуры, я получаю что-то, если выбрал DatabaseB в раскрывающемся списке в верхнем левом углу в Management Studio, но если У меня там выбрана база данных А, я ничего не получаю.

Я также пытался запускать хранимые процедуры с аналогичной структурой в базе данных 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 голосов
/ 04 сентября 2018

Я обычно использую if object_id('databaseB.dbo.TableA') is not null вместо проверки наличия, чтобы избежать полной квалификации sys.objrcts.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...