У меня есть таблица, настроенная с помощью TSQL:
CREATE TABLE NORM_TRADE_AMOUNT
(
SOURCE_ID INT NULL
, SOURCE_STATE_ID INT NULL
, DESTINATION_ID INT NULL
, DESTINATION_STATE_ID INT NULL
, CONSTRAINT C_TRADE_IMPORT
CHECK( SOURCE_ID IS NULL OR SOURCE_STATE_ID IS NULL )
, CONSTRAINT C_TRADE_EXPORT
CHECK( DESTINATION_ID IS NULL OR DESTINATION_STATE_ID IS NULL )
, CONSTRAINT C_ALL_TRADE
CHECK( (( SOURCE_ID IS NULL OR SOURCE_STATE_ID IS NULL ) OR ( DESTINATION_ID IS NULL OR DESTINATION_STATE_ID IS NULL ))
AND NOT (( SOURCE_ID IS NULL OR SOURCE_STATE_ID IS NULL ) AND ( DESTINATION_ID IS NULL OR DESTINATION_STATE_ID IS NULL ))
)
, CONSTRAINT FK_SOURCE FOREIGN KEY (SOURCE_ID) REFERENCES NORM_COUNTRY(COUN_F_ID)
, CONSTRAINT FK_SOURCE_STATE FOREIGN KEY (SOURCE_STATE_ID) REFERENCES NORM_STATE(STATE_F_ID)
, CONSTRAINT FK_DESTINATION FOREIGN KEY (DESTINATION_ID) REFERENCES NORM_COUNTRY(COUN_F_ID)
, CONSTRAINT FK_DESTINATION_STATE FOREIGN KEY (DESTINATION_STATE_ID) REFERENCES NORM_STATE(STATE_F_ID)
)
И я пытаюсь вставить такие данные, как:
INSERT INTO NORM_TRADE_AMOUNT
VALUES(NULL,6033001,NULL,NULL)
,(NULL,6033002,NULL,NULL)
,(NULL,6033004,NULL,NULL)
,(NULL,6033005,NULL,NULL)
Я думаю, что таблица настроена так, чтобылибо у меня есть по крайней мере один из четырех столбцов с данными, в то время как данные в DESTINATION_ID
или DESTINATION_STATE_ID
, но никогда в обоих, или данные в SOURCE_ID
или SOURCE_STATE_ID
, но никогда в обоих, но никогда не имеющие все четыребыть NULL
.Тем не менее, когда я пытаюсь вставить свои данные, я получаю сообщение об ошибке:
The INSERT statement conflicted with the CHECK constraint "C_ALL_TRADE". The conflict occurred in database "RT_AGR_STG_DW", table "dbo.NORM_TRADE_AMOUNT".
Я что-то не так делаю логически?или синтаксис выключен?