2012-04-30 3 views
2

Я пытаюсь вставить столбцы JobNo и CellNo, которые не указаны в Table_1 от View_1. Я написал этот вопрос & Я получаю сообщение об ошибке.INSERT INTO using WHERE

Пожалуйста, помогите мне в исправлении этого вопроса.

Я использую SQL Server 2008

INSERT INTO Table_1(ID, JobNo, CellNo) 
    SELECT View_1.ID, View_1.JobNo, View_1.CellNo 
    FROM View_1 
    WHERE View_1.JobNo 
    AND View_1.CellNo NOT IN (SELECT JobNo, CellNo FROM Table_1) 
+0

Если у вас есть ошибка - **, пожалуйста, сообщите нам, что это такое! ** Просто сообщив нам, что вы получаете один, не помогает .... –

ответ

6

Вопрос Ваш пункт WHERE - вы не можете сравнивать наборы полей, как это. Вы можете сравнивать только одно поле за раз.

Попробуйте вместо этого:

WHERE View_1.JobNo NOT IN(SELECT JobNo FROM Table_1) 
AND View_1.CellNo NOT IN (SELECT CellNo FROM Table_1) 

В качестве альтернативы вы можете использовать один EXISTS заявление:

INSERT INTO Table_1(ID, JobNo, CellNo) 
SELECT View_1.ID, View_1.JobNo, View_1.CellNo 
FROM View_1 v 
WHERE NOT EXISTS (SELECT 1 FROM Table_1 t 
        WHERE t.JobNo = v.JobNo 
        AND t.CellNo = v.CellNo) 
+0

Некоторые СУБД допускают такие условия, как: '(View_1.JobNo, View_1 .CellNo) NOT IN (SELECT JobNo, CellNo FROM Table_1) '- что, конечно, отличается от вашего запроса. Я предполагаю, что OP хочет, чтобы все было эквивалентно с tthat, который работает на SQL-Server. –

+0

@ypercube - я добавил «EXISTS», когда вы набирали это: – JNK

+2

+1 для 'exist'. Был готов опубликовать его. Возможно, вы должны упомянуть, что ваши запросы не эквивалентны. –

1

Так как вы используете SQL Server 2008, вы можете использовать MERGE заявление:

MERGE INTO Table_1 dst 
USING (
    SELECT View_1.ID, View_1.JobNo, View_1.CellNo 
    FROM View_1 
) src 
ON src.JobNo = dst.JobNo 
AND src.CellNo = dst.CellNo 
WHEN NOT MACHED THEN INSERT (ID, JobNo, CellNo) 
    VALUES (src.ID, src.JobNo, src.CellNo) 

Я лично f ind a MERGE заявление более кратким, чем INSERT .. SELECT .. WHERE.

Смежные вопросы