Оператор SQL Insert-Select - PullRequest
       26

Оператор SQL Insert-Select

1 голос
/ 03 августа 2011

Я использую Visual Basic 6.0 с SQL Server 2005

Вот мой код:

Cn.Execute "INSERT INTO schedule (sch_name, st_id, sch_note)
            SELECT '" & txtSchedname.Text & "', st_id, '" & txtNote.Text & "'
            FROM scheduletype
            WHERE st_name = '" & cboSchedtype.Text & "'"

Это вставка в оператор выбора и работает нормально. Два входа непосредственно сохраняются в таблице [schedule] и один вход поступает из таблицы [scheduletype].

Но что, если нет соответствующих записей для cboSchedtype.Text?

SELECT st_id
FROM scheduletype
WHERE st_name = '" & cboSchedtype.Text & "'"

Вот что я хочу сделать:

I. Сделайте 'sub-insert' для значения cboSchedtype.Text в таблице [scheduletype], только если он не существует (до того, как основной запрос вставки сделает свое дело)

II. В противном случае продолжайте в обычном режиме. (Мой код успешно делает это.)

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Используйте это, чтобы добавить scheduletype, если он не существует.

insert into scheduletype 
select 'TheScheduleType'
where not exists (select st_name 
                  from scheduletype
                  where st_name = 'TheScheduleType')

После того, как вы это сделали, вы можете использовать оператор вставки для schedule, потому что знаете, что строка будет существовать.

0 голосов
/ 04 августа 2011

ISNULL: http://msdn.microsoft.com/en-us/library/ms184325.aspx

SELECT st_id FROM scheduletype WHERE st_name = ISNULL('" & cboSchedtype.Text & "', subquery)"
...