ブール値に評価される 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 ステートメントで使用できる関数を正規のブール式として宣言する方法はありますか?
ありがとう!