#sql #sql-server #oracle #case
Вопрос:
Я хочу перенести данные из Oracle Datawarehouse на SQL Server в зависимости от условий.
У меня есть 3 столбца сегмента(seg_1,seg_2,seg_3) в table_A в хранилище данных, я хочу перенести их в SQL, но я хочу сделать их одним столбцом на основе столбца, присутствующего в SQL server table_B. Для этого я запущу хранимую процедуру.
SELECT ID,
CASE WHEN seg_1 in (select seg from [Servername].[dbname].[schemaname].[table_B]) then seg_1
WHEN seg_2 in (select seg from [Servername].[dbname].[schemaname].[table_B]) then seg_2
WHEN seg_3 in (select seg from [Servername].[dbname].[schemaname].[table_B]) then seg_3
End
from table_A
Когда я пытаюсь запустить приведенный выше код в хранимой процедуре, он выдает ошибку, так как table_B-недопустимое имя таблицы. Таблица присутствует на этом сервере и в базе данных. Пожалуйста, помогите мне это сделать.
Комментарии:
1. Какую часть ошибки вы не понимаете? Вам нужно для
table_B
того, чтобы существовать. Возможно, вам захочется выяснить, почему вы считаете, что он должен существовать, а его нет.2. В дополнение к комментарию Гордона, в вашем коде явно не указано имя схемы ни для того
table_A
, ниtable_B
для другого, и в этом случае ваш запрос может не «видеть» таблицы, даже если они существуют, поскольку они могут отсутствовать в схеме пользователя по умолчанию или dbo. Укажите имена схем для таблиц в запросе.3. Привет, я указал имена таблиц следующим образом [Имя сервера]. [имя базы данных]. [имя схемы]. [имя таблицы], но все равно получена ошибка как недопустимое имя таблицы.
4. При чем тут Оракул?
[Servername].[dbname].[schemaname].[table_B]
Предназначено для ссылки на таблицу Oracle? Пожалуйста, поясните, в вашем вопросе не все ясно.5. Если это означало ссылку на Oracle, формат должен быть
SELECT * FROM LinkedServer..Schema.Table