1

ブール値に評価される T-SQL 関数を作成しようとしています。

BIT は BOOLEAN 型に相当する T-SQL であるという記事をいくつか読みました ( Is there a Boolean data type in Microsoft SQL Server like there is in MySQL?http://social.msdn.microsoft.com/など)。 Forums/en-US/transactsql/thread/c3143a77-c921-40a7-920e-3d5c5f7a269a )。

しかし、BIT を返す関数を作成すると、次のようになります。

create function dbo.fn_checkLength( @name nvarchar(50), @maxLength int) returns bit
as begin

    if len(@name) > @maxLength return cast(0 as bit);

    return cast(1 as bit);
end;
GO

次のステートメントがあるため、ブール値に評価される関数として動作しません。

create table dbo.test_table (
    id int,
    name nvarchar(50),

    constraint
        ck_test_table_maxLength
    check (
        dbo.fn_checkLength(name, 10)
    )
);
GO

私に与えます:

メッセージ 4145、レベル 15、状態 1、行 10
')' の近くで条件が予想されるコンテキストで指定された非ブール型の式。

それを機能させるために、関数を呼び出すときに、ブール演算子をミックスに追加して、式を実際にブール値にします。

create table dbo.test_table (
    id int,
    name nvarchar(50),

    constraint
        ck_test_table_maxLength
    check (
        dbo.fn_checkLength(name, 10) > 0
    )
);
GO

これはなぜですか?T-SQL ステートメントで使用できる関数を正規のブール式として宣言する方法はありますか?

ありがとう!

4

2 に答える 2

7

SQL:1999より前SQLには真の Boolean データ型がなく、現在この機能をサポートしている実装はほとんどありません。

ビット型は真のブール型ではありません。値 1 または 0 (または NULL) を持つことができる数値型です。

したがって、この機能をサポートする SQL:1999 実装を使用しない限り、チェック句にブール式を含める必要があります。

于 2013-03-29T16:40:04.787 に答える
1

興味深い..唯一の説明は、定義によるCHECKは「TRUEまたはFALSEに評価される条件式」のみを受け入れることだと思います。ドキュメント の2 行目によると、You can create a CHECK constraint with any logical (Boolean) expression that returns TRUE or FALSE based on the logical operators.「論理演算子」が重要です。

于 2013-03-29T16:40:59.383 に答える