#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;