Возможно ли добавить целостность данных между столбцами в разных таблицах SQL Server? У меня есть стол Pay with column Дата и таблица Заказы с графом DateofOrder. И я хотел бы добавить целостность данных, так что Дата не может быть раньше DateofOrder. И когда пользователь вставляет туда ту же дату или даже более раннюю базу данных, будет отображаться ошибка.Dataintegrity между таблицами в SQL Server
ответ
I думаю вы имеете в виду что-то вроде этого, здесь сделано с помощью триггера;
CREATE TRIGGER trig_pay ON Pay
FOR INSERT, UPDATE
AS
IF EXISTS(SELECT *
FROM [Order] o
JOIN inserted i
ON o.id = i.payment_id
WHERE DateOfOrder>[date])
BEGIN
RAISERROR ('Sorry, Dave', 16, 1)
ROLLBACK;
RETURN;
END
INSERT INTO [Order] values (1, GETDATE()); -- Order today
INSERT INTO Pay values (1, DATEADD(dd, -1, getdate())); -- Pay yesterday
> Sorry, Dave
Да, вы можете сделать это, используя INSTEAD OF INSERT Триггер.
Вам нужно использовать триггер INSTEAD OF или AFTER, чтобы выполнить это, вы не можете сделать это декларативно. Ну, вы можете использовать ограничение проверки с TVF или что-то еще, но я никогда не пробовал это.
Я бы показал пример кода, но я не уверен, какая зарплата имеет отношение к заказам. Если приходит новый заказ, какая дата оплаты должна быть позже или равна дате заказа? Есть ли другой столбец, который связывает эти две таблицы?
Сначала я вставить Заказать дату, например. 2012-03-11, а затем я перехожу к таблице Pay и вставляю дату, например. 2012-03-15 (конечно, это может быть 2012-03-11), но это не может быть 2012-03-01 В моих классах мы используем только Microsoft SQL Server Management Studio. – Dexter101
Можете ли вы показать мне пример кода моей проблемы? И предположим, что Order and Pay являются единственными таблицами в базе данных с только столбцами DateofOrder и Date. – Dexter101
Если вы можете объяснить, как связаны ваши таблицы, я мог бы сделать снимок. Вы имеете в виду, когда вы вставляете заказ, не может быть более ранней даты в таблице оплаты вообще, или нет более ранней даты для строки, которая имеет что-то вообще для того, чтобы сделать заказ, который вы только что вставили? –
Возможно, не прибегая к триггерам.
Идея заключается в том, чтобы добавить DateofOrder
в Orders
таблице его существующий ключ - давайте назовем его order_id
- создать соединение суперключ, затем ссылаться на этот суперключ (вместо простого ключа исключительно order_id
) в Pay
таблице ,
Вот голые кости:
CREATE TABLE Orders
(
order_id CHAR(10) NOT NULL,
DateofOrder DATE NOT NULL,
UNIQUE (order_id), -- simple candidate key
UNIQUE (DateofOrder, order_id) -- compund superkey
);
CREATE TABLE Pay
(
order_id CHAR(10) NOT NULL,
DateofOrder DATE NOT NULL,
FOREIGN KEY (DateofOrder, order_id)
REFERENCES Orders (DateofOrder, order_id),
DateOfPayment DATE NOT NULL,
CHECK (DateofOrder < DateOfPayment),
UNIQUE (order_id)
);
- 1. sql-server 2008, различия между таблицами
- 2. SQL Server -Добавление значения между таблицами
- 3. SQL Server 2014 (или отношения между таблицами)
- 4. SQL Server: список различий между таблицами
- 5. SQL Server 2005 Запрос между двумя таблицами
- 6. SQL Server - копирование данных между таблицами
- 7. Сумма между 3 связанными таблицами SQL Server
- 8. SQL Server Условный Присоединяйтесь между двумя таблицами
- 9. SQL Server создает правильную взаимосвязь между таблицами
- 10. Макс. Дата между записями и между таблицами - SQL Server
- 11. SQL-запрос между таблицами
- 12. объединение между таблицами в SQL
- 13. Найти разницу между двумя таблицами в SQL Server
- 14. 2 каскадные Удаления В SQL Server между 2 таблицами
- 15. Как найти отношения между таблицами в Microsoft SQL Server 2008?
- 16. Удалить пересечение между двумя таблицами в SQL Server
- 17. Как получить разницу между таблицами дат в SQL Server?
- 18. копировать данные между таблицами sql
- 19. SQL Count между двумя таблицами
- 20. Создание отношения между двумя таблицами в SQL
- 21. Получить счетчик отсутствующих записей между двумя таблицами (SQL Server 2012)
- 22. Эффективное перемещение больших наборов данных между таблицами SQL Server?
- 23. SQL Server 2014 - Как найти Min Date между 2 таблицами
- 24. MS SQL Server: сложный запрос JOIN между несколькими таблицами
- 25. Ассоциированные пары между двумя таблицами с SQL Server 2005
- 26. SQL Server 2008 Выполните ничью между 2 таблицами
- 27. SQL Server: найти отношения между таблицами без ограничений внешнего ключа
- 28. SQL - принудительные ограничения между таблицами
- 29. Выбор между несколькими таблицами sql
- 30. Сложный SQL-соединение между таблицами
Спасибо, отлично работает! – Dexter101