同じ表の別の列の別の値と値をチェックするCHECK制約を実装する方法はありますか?具体的には、挿入する「チェックアウト」日付値が、行を挿入する前にテーブルの「checkin」日付値よりも大きいことを確認したいと思います。TSQL - 挿入する前に別の列の値に対して値をチェックする方法
詳細が不明な場合がありますので、ご連絡ください。
同じ表の別の列の別の値と値をチェックするCHECK制約を実装する方法はありますか?具体的には、挿入する「チェックアウト」日付値が、行を挿入する前にテーブルの「checkin」日付値よりも大きいことを確認したいと思います。TSQL - 挿入する前に別の列の値に対して値をチェックする方法
詳細が不明な場合がありますので、ご連絡ください。
あなたが好きなチェックを使用できます。
:その後のような機能を追加し
CREATE FUNCTION CheckDates()
RETURNS int
AS
BEGIN
DECLARE @retval int
SET @retval = (SELECT COUNT(*) FROM myTable WHERE checkout > checkin)
RETURN @retval
END;
これらは、書かれているようには機能しない可能性があります(現時点ではSQLエンジンにアクセスできません。)
または、チェックに失敗したときのコードでエラー処理を使用する必要がないように、そのチェックをクエリに含めることができます。
あなただけの句は何かのようであることをどこに拡張することができ失敗し、挿入したい場合は:あなたが好きなものを使用することができますいずれかの問題があったことを示すインジケータのいくつかのタイプを返すようにしたい場合は
INSERT INTO myTable (checkout)
VALUES(@checkout)
WHERE @checkout > @checkin AND IDcolumn = @IDcolumn
しかし、上記のことはSELECT @@ ROWCOUNTを追加したり、あなただけ事前に値を確認し使用できます。値が渡された場合
DECLARE @var int
SET @var = (SELECT count(*)
FROM myTable
WHERE @checkout > checkin AND IDcolumn = @IDcolumn)
@varは、1に等しくなります。
はい、MSSQLサーバー(およびその他)CHECK CONSTRAINTS on the tableを許可する - あなたが列を比較できるように:
ALTER TABLE tbl ADD CONSTRAINT chkCheckout_GT_Checkin
CHECK (Ckeckout > Checkin)
トリガーを使用できます。
拡張されたwhere句のためにupvoted!トリガーよりはるかに明白で、管理が容易です。 –