CREATE TABLE testtbl (
Id INT IDENTITY(1,1) NOT NULL,
seq_num INT NULL,
parent_seq_num INT NULL
)
ALTER TABLE testtbl
ADD CONSTRAINT chkseqnum CHECK (seq_num IS NULL OR (seq_num IS NOT NULL AND parent_seq_num IS NOT NULL));
INSERT INTO testtbl (seq_num, parent_seq_num)
VALUES (NULL,1)
INSERT INTO testtbl (seq_num, parent_seq_num)
VALUES (2,NULL)
INSERT INTO testtbl (seq_num, parent_seq_num)
VALUES (3,2)
SELECT *
FROM testtbl
SQL Server Syntax with some good references to add a Table/Column Constraint
We need to add a Constraint to one of our tables which will not allow a <NULL> to a data column based on the value of a [seq_num] because we want to start using this going forward...thus wanting to specify a [seq_num] to enforce going forward.
Can anyone tell me the exact Syntax to do so? Just want to make sure we get this right with all the Constraint options and what not.
And maybe site some good web references for CONSTRAINT Syntax.
Thanks in advance for your help.
5 answers
Sort by: Most helpful
-
Tom Phillips 17,741 Reputation points
2021-11-05T16:39:02.083+00:00 -
Bobby P 231 Reputation points
2021-11-05T17:09:53.36+00:00 But I want to base it on a specific number? So it should NOT be <NULL> and NOT ALLOW <NULL> after a [seq_num] is say 65000
-
EchoLiu-MSFT 14,601 Reputation points
2021-11-08T06:05:00.35+00:00 Hi @Bobby P ,
You can create a check constraint in a table to specify the data values that are acceptable in one or more columns in SQL Server by using SQL Server Management Studio or Transact-SQL.
Please also chek:
Create Check ConstraintsIf you have any question, please feel free to let me know.
If the response is helpful, please click "Accept Answer" and upvote it.Regards,
Echo
If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
-
Bobby P 231 Reputation points
2021-11-08T17:05:57.237+00:00 Why can't I grasp this?
I created...
ADD CONSTRAINT [CK_payment_cards_patient_num] CHECK ([patient_num] IS NULL
OR
(
[payment_card_seq_num] > 67940
AND [patient_num] IS NOT NULL
)
)
;And it still is allowing <NULL> for [patient_num] if the [payment_card_seq_num] is greater than 67940
-
Erland Sommarskog 116.5K Reputation points MVP
2021-11-08T22:34:32.913+00:00 Well, the constraint clearly says that patient_num being NULL is legal. What is not legal is to give a value to patient_num if payment_card_seq_num is less or equal to 67940.
I think this is constraint you need:
CHECK (NOT (patient_num IS NULL AND [payment_card_seq_num] > 67940))
I have often found it easier to write CHECK constraints by explicitly expressing what I am disallowing.