Скопируйте два столбца в другую таблицу, один из которых является первичным ключом - PullRequest
1 голос
/ 28 марта 2012

У меня есть большая таблица (Посещения) с первичным ключом kha_ID.В этой таблице около дюжины столбцов, и я хочу заменить только один из них, ADM_SRC.Проблема в том, что ADM_SRC содержит нули.Я импортировал другую таблицу с kha_id и соответствующей ADM_SRC этой записи.Я надеюсь, что мой запрос ниже вставит правильный ADM_SRC в правильную запись.

Вот мой запрос, я хотел проверить, пройдет ли он, прежде чем я выполню его

INSERT INTO tblVisits (kha_id, adm_src)
SELECT (kha_id, adm_src) from tblAdm_Src

tblAdm_Src - импортированная таблица.Спасибо.

Ответы [ 2 ]

5 голосов
/ 28 марта 2012

Предполагая

  • Нет данных в tblVisits
  • Идентификатор не является автоматически увеличивающимся столбцом идентификаторов
  • Для всех столбцов указано значение по умолчанию

Тогда ваш запрос будет работать

insert into tblVisits (kha_id, adm_src) select kha_id, adm_src from tblAdm_Src

Если некоторые столбцы не имеют значений по умолчанию, вам необходимо указать значения по умолчанию в запросе, например,

insert into tblVisits (kha_id, adm_src, otherColumn) 
select kha_id, adm_src, 'a value' from tblAdm_Src

Если kha_id является столбцом идентификаторов, вам нужно использовать SET IDENTITY_INSERT

set identity_insert tblVisits on
insert into tblVisits (kha_id, adm_src) select kha_id, adm_src from tblAdm_Src
set identity_insert tblVisits off

Если в Visit есть данные, и вам нужно обновить соответствующие строки, но вставить недостающие, вам нужно что-то вроде

-- update existing rows
update tblVisits 
    set adm_src = tblAdm_Sr.adm_src
from VisitSource
    where tblVisits.kha_id = tblAdm_Sr.kha_id

-- insert missing rows
insert into tblVisits (kha_id, adm_src) 
select kha_id, adm_src from tblAdm_Src
   where not exists(
     select kha_id from tblVisits where tblVisits.kha_id = tblAdm_Src.kha_id)

и, конечно, принимая во внимание значения по умолчанию и автоматически увеличивая столбец Id при необходимости

1 голос
/ 28 марта 2012

Я хотел проверить, пройдет ли он, прежде чем запустить его

возможно я не правильно понимаю ваш вопрос .. но как насчет

  1. отключение автоматической фиксации
  2. выполнение вашего запроса
  3. проверить результат
  4. commit (все прошло нормально) или откат (не результат, как ожидалось)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...