I'm not sure if this is any better or more correc that Visakh's solution (as I didn't try it). but, maybe it'l help?
-- Create Tables
CREATE TABLE PaymentMethod
(
PaymentMethodID INT IDENTITY(1, 1) PRIMARY KEY,
Description VARCHAR(20) NOT NULL
)
CREATE TABLE Payment
(
PaymentID INT IDENTITY(1, 1) PRIMARY KEY,
PaymentMenthodID INT NOT NULL CONSTRAINT cfkPay FOREIGN KEY (PaymentMenthodID) REFERENCES PaymentMethod (PaymentMethodID),
ChequeNo varchar(20) not null
)
ALTER TABLE Payment
ADD CONSTRAINT CK_Payment_ChequeNo CHECK ((CASE WHEN PaymentMenthodID = 1 AND LEN(ChequeNo) > 0 THEN 1 WHEN PaymentMenthodID <> 1 AND LEN(ChequeNo) = 0 THEN 1 ELSE 0 END) = 1)
-- Popualte Domain Data
SET IDENTITY_INSERT PaymentMethod ON
INSERT PaymentMethod (PaymentMethodID, Description)
VALUES
(1, 'Cheque'),
(2, 'Cash'),
(3, 'Credit Card')
SET IDENTITY_INSERT PaymentMethod ON
-- Try Inserting
INSERT Payment (PaymentMenthodID, ChequeNo) VALUES (1, NULL) -- Fail
INSERT Payment (PaymentMenthodID, ChequeNo) VALUES (1, '') -- Fail
INSERT Payment (PaymentMenthodID, ChequeNo) VALUES (1, '12345') -- Success
INSERT Payment (PaymentMenthodID, ChequeNo) VALUES (2, '12345') -- Fail
INSERT Payment (PaymentMenthodID, ChequeNo) VALUES (2, '') -- Success
-- Drop tables
DROP TABLE Payment
DROP TABLE PaymentMethod
EDIT: Added DROP