それが最善の方法かどうかはわかりませんが、関数を追加してチェック制約で使用できます。
CREATE FUNCTION CheckCityInCountry(@CityID int, @CountryID int)
RETURNS int
AS
BEGIN
DECLARE @retval int
SELECT @retval = COUNT(*)
FROM Cityies CI inner join Countries CO on (CI.CountryID, CO.ID)
WHERE CO.CountryID = @CountryID and CityID = @CityID
RETURN @retval
END;
GO
この関数は、都市が国にある場合は 1 を返し、それ以外の場合は 0 を返します。
次に、その関数を使用してチェック制約を追加します。
ALTER TABLE Customers
ADD CONSTRAINT chk_CheckCityInCountry CHECK (
CityID is null OR
dbo.CheckCityInCountry(CityID,CountryID) >= 1
);
GO