Создание таблицы и заполнение слиянием - PullRequest
1 голос
/ 08 марта 2012

У меня есть таблица SQL 2008 R2, которая состоит из (col1 (char), col2 (int, prim key), col3 (char)).

Я заполняю таблицу ...

MERGE [dbo].[Data] as target
USING 
(
SELECT 01, 1, 'Data1'
UNION ALL 
SELECT 03, 2, 'Data2'
UNION ALL 
SELECT D2, 3, 'Data3'
)AS source ([Col1], [Col2], [Col3])
ON (target.[Col2] = source.[Col2])
WHEN MATCHED THEN 
    UPDATE SET [Col1] = source.[Col1],
               [col3] = source.[col3]
WHEN NOT MATCHED THEN   
    INSERT ([col1], [col2], [col3])
    VALUES (source.[col1],source.[col2], source.[col3]);

Заполняется нормально, кроме оператора «SELECT D2, 3,« Data3 »», и выдает неверное имя столбца. Есть идеи почему или как это исправить?

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Вам нужно добавить этот маленький символ в col1: '

MERGE [dbo].[Data] as target
USING 
(
SELECT '01' Col1, 1 Col2, 'Data1' Col3
UNION ALL 
SELECT '03', 2, 'Data2'
UNION ALL 
SELECT 'D2', 3, 'Data3'
)AS source ([Col1], [Col2], [Col3])
ON (target.[Col2] = source.[Col2])
WHEN MATCHED THEN 
    UPDATE SET [Col1] = source.[Col1],
               [col3] = source.[col3]
WHEN NOT MATCHED THEN   
    INSERT ([col1], [col2], [col3])
    VALUES (source.[col1],source.[col2], source.[col3]);
1 голос
/ 09 марта 2012

Вам нужен D2 в кавычках, например: 'D2', если это строка. Если это столбец из таблицы, вам нужно сделать SELECT D2, 3, 'Data3' FROM <table>

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