web-dev-qa-db-ja.com

負の値のみを受け入れるように列を設定する

とにかく負の値のみを受け入れるように列のデータ型を変更する方法はありますか?

SQL Server 2014 Azureです。

3
Easy987us
CREATE TABLE t ( n INTEGER NOT NULL CHECK (n < 0) );

私が知っているほとんどのRDBMSで動作します。

編集:@IMSopのコメントにより、「mostRDMSと書いた理由を指定するよう求められます: 」CHECK制約 がMySQLによって受け入れられないことはよく知られています(そして非常に残念です)。 MySQLでは、 トリガーを使用する必要があります 代わりに。別のオプションは、MariaDBに切り替えることです。

14
Dario

これは、少なくともSQL Serverでは [〜#〜] check [〜#〜] 制約を使用して実現できます。

上記の投稿から:

CHECK制約は、1つ以上の列で受け入れられる値を制限することにより、ドメインの整合性を適用します。論理演算子に基づいてTRUEまたはFALSEを返す論理(ブール)式を使用してCHECK制約を作成できます。たとえば、給与列の値の範囲は、$ 15,000から$ 100,000の範囲のデータのみを許可するCHECK制約を作成することによって制限できます。これにより、通常の給与範囲を超えて給与が入力されるのを防ぎます。論理式は次のようになります:salary> = 15000 AND salary <= 100000。

4
Scott Hodgin