Я пытаюсь выполнить процедуру с параметром, и в зависимости от значения параметра будут оцениваться три различных условия IF, чтобы проверить, какой запрос он выполнит со связанного сервера.
Но когда Я выполняю запрос, кажется, что проверяется, существуют ли таблицы внутри всех IF до начала запроса. И я знаю, что существует только одна таблица, поэтому я использую этот параметр, поэтому он не должен давать сбой. но я все равно получаю следующую ошибку:
Сообщение 7314, уровень 16, состояние 1, строка 25 Поставщик OLE DB «Microsoft.ACE.OLEDB.16.0» для связанного сервера «LinkedServer» не содержит стол "Д100". Таблица либо не существует, либо текущий пользователь не имеет разрешений для этой таблицы.
Итак, в этом коде предположим, что параметр равен 300. Затем я получаю сообщение выше. Знаете ли вы, если есть способ ограничить запрос не проверкой всех таблиц, а только той, в которой будет выполнено условие IF?
ALTER PROCEDURE[dbo].[Import_data]
@p1 int = 0
AS
BEGIN
SET NOCOUNT ON;
IF(@p1 = 100)
BEGIN
DROP TABLE IF EXISTS Table1
SELECT [Field1], [Field2], [Field3], [Field4], [Field5], [Field6]
INTO Table1
FROM[LinkedServer]...[D100]
END
IF(@p1 = 200)
BEGIN
DROP TABLE IF EXISTS Table2
SELECT[Field1], [Field2], [Field3], [Field4], [Field5], [Field6]
INTO Table2
FROM[LinkedServer]...[D200]
END
IF(@p1 = 300)
BEGIN
DROP TABLE IF EXISTS Table3
SELECT[Field1], [Field2], [Field3], [Field4], [Field5], [Field6]
INTO Table3
FROM[LinkedServer]...[D300]
END
END
Я пытался его погуглить, но В основном я нашел обходные пути при выполнении подпроцедуры, но я думаю, что это не совсем чистое решение.