У меня есть две таблицы на одном сервере (MSSMQL) с двумя разными схемами: цель ([dbo].[Reserv]) и источник ([staging].[Reserv]) Я попытался сделать сопоставление (от источника к цели), чтобы подать bdo из Staging.
схема цели:
CREATE TABLE [dbo].[Reserv](
[SourceID] [int] NOT NULL,
[ResourceType] [varchar](10) NULL,
[ResourceTableName] [varchar](100) NULL
)
Схема источника:
CREATE TABLE [staging].[Reserv](
[SourceID] [int] NOT NULL,
[ReType] [varchar](10) NULL,
)
У меня есть правило для 'ResourceTableName' -> ** ResType= 'A', затем 'Em' ResType='En', затем'En'**
что я сделал в своей хранимой процедуре для вставки, но у меня не сработало:
....
WHEN NOT MATCHED THEN
INSERT
(
[SourceID]
,[ResourceType]
,[ResourceTableName]
)
VALUES
(
7
,SOURCE.[ResourceType]
,CASE WHEN SOURCE.[ResourceType]=''A'' THEN INSERT ''Em'' ELSE INSERT ''En'' END
);';
Спасибо
SMor, я редактирую свой вопрос, чтобы он был более ясным.
Вы можете вставить строки с логикой case
:
insert into target (SourceID, ResourceType, ResourceTableName)
select s.SourceID, s.ResourceType,
(CASE WHEN s.[ResourceType] = 'Agent' THEN 'Employee' ELSE 'Engin' END)
from source s;
Если это не то, что вы имеете в виду, то я не понимаю "отображение".
Без контекста в этом мало смысла. Но CASE в tsql — это выражение, возвращающее скалярное значение. Ваш очень сокращенный код (который кажется tsql) логически ошибочен и будет генерировать синтаксическую ошибку, если вы попытаетесь использовать его в качестве конструкции управления потоком. Вы столкнулись с ошибкой? Это ты имеешь в виду под "не получилось"? Если да, опубликуйте полное сообщение об ошибке и полный (если он сокращен) код, вызвавший ошибку.