2013-04-09 3 views
1

Я продолжаю получать сообщение о моей запятой в своем заявлении о вставке. Любая идея, почему это может быть.Почему я получаю сообщение об ошибке для моей инструкции insert?

Вот сообщение об ошибке:

Msg 102, Level 15, State 1, Line 3
Неправильный синтаксис около ''.

и INSERT INTO...SELECT заявление

insert into custflag (cust_no, flag) 
    select 
     customer.cust_no 
    from 
     customer, dupaddr 
    where 
     customer.cust_no = dupaddr.cust_no, select cast(flag as int) 
              from flag 
              where flag_desc = 'Dup Customer' 

вот полный код моего запроса.

SET IDENTITY_INSERT flag ON 
insert into flag (flag,flag_desc,available) 
values ((select Max(flag) from flag) + 1, 'Dup Customer', 1) 

create view dupaddr as 
select distinct c1.cust_no, c1.firstname, c1.lastname, c1.company, c1.predir + ' ' + c1.streetno + ' ' + c1.streetnm + ' ' + c1.suffix + ' ' + c1.postdir as fff ,c1.address2 
from customer c1,customer c2 
where c1.cust_no <> c2.cust_no 
and c1.firstname = c2.firstname 
and c1.lastname = c2.lastname 
and c1.company = c2.company 
and c1.predir + ' ' + c1.streetno + ' ' + c1.streetnm + ' ' + c1.suffix + ' ' + c1.postdir = c2.predir + ' ' + c2.streetno + ' ' + c2.streetnm + ' ' + c2.suffix + ' ' + c2.postdir 
and c1.address2 = c2.address2 



insert into custflag (cust_no,flag) 
select customer.cust_no from customer, dupaddr where customer.cust_no = dupaddr.cust_no , select cast(flag as int) from flag where flag_desc = 'Dup Customer' 

выяснил, что я добавил флаг в представление и смог упростить инструкцию insert. Спасибо всем за вашу помощь!

SET IDENTITY_INSERT flag ON 
insert into flag (flag,flag_desc,available) 
values ((select Max(flag) from flag) + 1, 'Dup Customer', 1) 

create view dupaddr as 
select distinct c1.cust_no, 
c1.firstname, 
c1.lastname, 
c1.company, 
c1.predir + ' ' + c1.streetno + ' ' + c1.streetnm + ' ' + c1.suffix + ' ' + c1.postdir as fff , 
c1.address2, 
(SELECT cast(flag as int) FROM flag WHERE flag_desc = 'Dup Customer') as flag 
from customer c1,customer c2 
where c1.cust_no <> c2.cust_no 
and c1.firstname = c2.firstname 
and c1.lastname = c2.lastname 
and c1.company = c2.company 
and c1.predir + ' ' + c1.streetno + ' ' + c1.streetnm + ' ' + c1.suffix + ' ' + c1.postdir = c2.predir + ' ' + c2.streetno + ' ' + c2.streetnm + ' ' + c2.suffix + ' ' + c2.postdir 
and c1.address2 = c2.address2 



insert into custflag (cust_no,flag) 
select dupaddr.cust_no, dupaddr.flag from dupaddr 
+0

какова связь между этой таблицы 'клиента, dupaddr, flag'? –

+1

Что должен делать последний 'SELECT CAST (Flag AS INT)'? Это неправильная часть ..... –

+0

Вам необходимо ** соединить ** таблицы 'customer',' dupaddr' и 'flag' соответствующим образом, чтобы вы могли выбрать два элемента' cust_no' и ' flag' из этих объединенных таблиц - вы не можете использовать другой * подзапрос * в том месте, где вы его используете, - не работает. –

ответ

0

Для того, чтобы вы запрашиваете работу, вот эквивалентный код,

INSERT INTO custFlag(cust_no, flag) 
SELECT a.cust_no, c.flag 
FROM customer a 
     INNER JOIN dupaddr b 
      ON a.cust_no = b.cust_no 
     INNER JOIN 
     (
      SELECT cust_no, cast(flag as int) flag 
      FROM flag 
      WHERE flag_desc = 'Dup Customer' 
     ) c ON a.cust_no = c.cust_no 

Но я сомневаюсь CROSS JOIN не то, что вы хотите, вы можете сказать мне, как таблица flag связана с customer и dupaddr?

+0

В таблице флагов просто хранятся custflagid, флаг (числовое значение) и cust_no. dupadder - это представление, которое я создал, чтобы получить список всех клиентов, у которых был другой cust_no, но тот же адрес. – BryansDriving

+0

см. Мой обновленный ответ. –

+0

_ В таблице флагов просто хранятся custflagid, флаг (числовое значение) и cust_no. dupadder - это представление, которое я создал, чтобы получить список всех клиентов, у которых был другой cust_no, но тот же адрес_ Извините, этот комментарий был неправильным, нет столбца cust_no в таблице флагов – BryansDriving

0

Как я заметил, - как-то ваш код немного запутанным .... это не ясно, как эти три таблицы customer, dupaddr и flag связаны - они должны быть правильно соединены таким образом, что вы можете захватить cust_no и Flag из одного заявления SELECT.

Я не вижу, как Flag связана с другими таблицами на всех - и вполне откровенно, я не понимаю, почему вы даже нужен dupaddr стол здесь вообще ....

Так попробовать что-то как это:

insert into custflag (cust_no, flag) 
    select 
     customer.cust_no, 
     (select cast(flag as int) from flag where flag_desc = 'Dup Customer') 
    from 
     customer 
    inner join 
     dupaddr on customer.cust_no = dupaddr.cust_no -- why do you need this??? 

или с того flag, кажется, не связано с какой-либо из строк выбирается на всех, вы можете также захватить этот раз перед вашим утверждением:

declare @flag INT 
select @flag = cast(flag as int) from flag where flag_desc = 'Dup Customer' 

insert into custflag (cust_no, flag) 
    select 
     customer.cust_no, @flag 
    from 
     customer 
    inner join 
     dupaddr on customer.cust_no = dupaddr.cust_no -- why do you need this??? 
0

Вы можете попробовать это

insert into custflag (cust_no, flag) 
    select 
     customer.cust_no, (select cast(flag as int) 
              from flag 
              where flag_desc = 'Dup Customer') 
    from 
     customer, dupaddr 
    where 
     customer.cust_no = dupaddr.cust_no 
Смежные вопросы