Копирование зависимой таблицы

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть эта таблица customers (я использую SQL Server).:

введите описание изображения здесь

В этой таблице было зарегистрировано около 300 клиентов. Я создал другую таблицу в другой базе данных и вставил этих клиентов в новую базу данных.

Вот таблица новых клиентов:

введите описание изображения здесь

Но у меня тоже есть операционный стол, и я его не менял. Проблема здесь в внешнем ключе. Поскольку PhoneNumber он больше не является первичным ключом в Customers таблице, customerId его больше не следует заполнять номером телефона. Я хочу знать, как я могу вставить около 1000 операций в новую таблицу операций, но использовать идентификатор каждого клиента в качестве внешнего ключа вместо номера телефона customerId .

Вот таблица операций:

введите описание изображения здесь

Ответ №1:

Вы можете использовать следующий запрос для обновления старых данных в таблице операций:

 UPDATE OperationTable AS OT SET CustomerID = 
   (SELECT ID FROM CustomerTable AS CT WHERE CT.PhoneNumber = OT.CustomerID)
 

Ответ №2:

Предполагая, что счетчик в старой базе данных совпадает с идентификатором пользователя в новой базе данных. В вашей предыдущей таблице операций старой базы данных напишите запрос, подобный приведенному ниже

 select 'Insert into OperationsTable values(
    '   CT.Counter   ',
    '   OT.TypeID   ',
    '   OT.Amount   ',
    '   OT.DateTime   ')' as newquery from OperationTable OT left outer join Customers CT on CT.PhoneNumber=OT.PhoneNumber
 

Это даст вам запросы insert, которые можно скопировать и запустить в новой OperationsTable в новой базе данных

Теперь — если приведенное выше предположение неверно — тогда — Вам нужно будет написать запрос к новой таблице customer, чтобы вставить новый идентификатор из новой базы данных customer в столбец Counter (или новый столбец CID) старой базы данных customer, а затем повторить описанный выше шаг.

Ответ №3:

Если мы предположим, что AFDB это старая база данных и StoreDB является новой, мне помог следующий запрос:

     INSERT INTO StoreDB.dbo.Operations
    SELECT  StoreDB.dbo.Customers.Id, TypeID, Amount, [DateTime]
    FROM AFDB.dbo.Operations JOIN StoreDB.dbo.Customers
    ON StoreDb.dbo.Customers.PhoneNumber = AFDB.dbo.Operations.CustomerId;