Ошибка «Неверное имя объекта ...» появляется на одном сервере, но нет на другом - PullRequest
0 голосов
/ 25 апреля 2018

У меня проводная ситуация. Приведенный ниже код прекрасно работает на одном сервере, но не на другом. Уровень совместимости баз данных одинаков на обоих серверах. Я использую sql server 2016.

;USE MyDB;
GO
--exec MyDB.dbo.sp_Cleanup_Bid5YearData
ALTER PROCEDURE dbo.sp_Cleanup_Bid5YearData

AS 

DECLARE @date VARCHAR(10), 
        @cmdIf NVARCHAR(200),
        @cmd NVARCHAR(4000)

SET @date = CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '_' + CAST(MONTH(GETDATE()) AS VARCHAR(2)) + '_' + CAST(DAY(GETDATE()) AS VARCHAR(2)) 

IF OBJECT_ID('tempdb..#Id_ToBeRemoved') IS NOT NULL --SELECT 1

   DROP TABLE #Id_ToBeRemoved;

CREATE TABLE #Id_ToBeRemoved
    (
        Id INT PRIMARY KEY NOT NULL, 
        Code CHAR(3) NOT NULL 
    );

INSERT INTO #Id_ToBeRemoved (Id, Code)
VALUES(12,'TMB'),
      (13,'FGR');

IF EXISTS (SELECT TOP 1 1 FROM #Id_ToBeRemoved) 

SET @cmd = ('

;USE MyDB;

IF EXISTS (SELECT 1 FROM [MyDB].dbo.Table_5YearData_'+@date+') 

    DROP TABLE [MyDB].dbo.Table_5YearData_'+@date+';

;USE MyDB;

SELECT 
    Id, 
    Code
INTO [MyDB].dbo.Table_5YearData_'+@date+'
FROM  #Id_ToBeRemoved; 
         ')

EXEC sp_executesql @cmd;
--EXEC (@cmd);
--select * from  [MyDB].dbo.Table_5YearData_2018_4_25 -- you may need to change the ending of the table "2018_4_25" depending on the date you run this statement 

Я получаю сообщение об ошибке:

Сообщение 208, Уровень 16, Состояние 1, Строка 7
Неверное имя объекта 'bidNotification.dbo.Table_5YearData_2018_4_25'

1 Ответ

0 голосов
/ 25 апреля 2018

Таблица bidNotification.dbo.Table_5YearData_2018_4_25 не существует в вашей второй базе данных. Ваш запрос проверяет, есть ли в таблице строки НЕ, если таблица действительно существует. Ваш запрос работает, только если эта таблица уже существует.

Вы можете изменить и сделать это вместо этого, используя OBJECT_ID(), чтобы убедиться, что таблица есть.

SET @cmd = ('

;USE MyDB;

IF OBJECT_ID(N''[MyDB].dbo.Table_5YearData' + @date + ''', N''U'') IS NOT NULL

    DROP TABLE [MyDB].dbo.Table_5YearData_'+@date+';

;USE MyDB;

SELECT 
    Id, 
    Code
INTO [MyDB].dbo.Table_5YearData_'+@date+'
FROM  #Id_ToBeRemoved; 
         ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...