#sql
#sql
Вопрос:
Эта инструкция SQL выполняется, но затем останавливается:
SET IDENTITY_INSERT [CPI].[dbo].[Transactions] ON
GO
insert into CPI.dbo.Transactions
(customerid = 24, TransactionId, DepartmentId, ItemId, CategoryId, Quantity, Cost, DateCreated, InvoiceNumber, DataSource, DataSourceId, ImportId, LastUpdate)
select customerid = 104, TransactionId, DepartmentId, ItemId, CategoryId, Quantity, Cost, DateCreated, InvoiceNumber, DataSource, DataSourceId, ImportId, LastUpdate
from Analyzer.dbo.transactions
но это обрабатывается около 5 минут, а затем эта ошибка:
Сообщение 547, уровень 16, состояние 0, строка 4 Инструкция INSERT конфликтовала с ограничением ВНЕШНЕГО КЛЮЧА «FK_Transactions_Customers». Конфликт произошел в базе данных «CPI», таблице «dbo.Customers», столбце «CustomerID». Выполнение инструкции завершено.
Комментарии:
1. Если вы публикуете код или XML, пожалуйста , выделите эти строки в текстовом редакторе и нажмите на кнопку «код» (101 010) на панели инструментов редактора, чтобы красиво оформить и выделить синтаксис!
Ответ №1:
Сообщение довольно четкое: вы пытаетесь вставить значение в Transactions
таблицу, которая имеет CustomerId
ссылку на таблицу dbo.Customers
(в столбце CustomerId
), которая не существует в таблице customers.
Очевидно, что существует связь с внешним ключом между Transactions
и Customers
, и ваш оператор INSERT нарушает эту ссылочную целостность.
Скорее всего, вы а) не синхронизировали свою Customers
таблицу между двумя серверами (пока) или б) каким-то образом пропустили некоторые записи.