自分のやりたいことが実現できるかどうかもわからないし、ただただ興味津々です。
TINYINT である MyType というユーザー定義型と、許容値が 0 から 3 の間でなければならないことを示す RULE があります。
-- Existing UDT & Rule which work
CREATE TYPE [MySchema].[MyTypes]
FROM [TINYINT]
CREATE RULE [MySchema].[MyTypes_Rule] AS
@Range BETWEEN 0 AND 3
sp_bindrule 'MySchema.MyTypes_Rule', 'MySchema.MyTypes'
私が知りたいのは、追加のルール/機能を追加して、NVARCHAR値を取り、その範囲内にある場合は適切なTINYINT値に変換する追加のルールを作成できるようにすることです。
CREATE RULE [MySchema].[MyTypes_NVARCHAR_Rule1] AS
@InValues IN (N'N', N'A', N'B', N'C')
CREATE RULE [MySchema].[MyTypes_NVARCHAR_Rule1] AS
@InValues IN (N'No Choice', N'Choice A', N'Choice B', N'Choice C')
そして、「Choice A」または「A」から値 1 への変換、「Choice B」または「B」から値 2 への変換などを行います。
以下のスクリプトは、文字列が許容値に変換される場所で実行したい機能に似ています。
CREATE TABLE [MyTable]
( [MyValue] BIT,
[Description] NVARCHAR(20) )
GO
INSERT INTO [MyTable]
( [MyValue], [Description] )
SELECT 0, 'Enterered as 0' -- false
UNION
SELECT 1, 'Enterered as 1' -- true
UNION
SELECT CAST(0 AS BIT), 'Enterered as CAST(0 AS BIT)' -- false
UNION
SELECT CAST(1 AS BIT), 'Enterered as CAST(1 AS BIT)' -- true
UNION
SELECT CAST('false' AS BIT), 'Enterered as CAST(''false'' AS BIT)' -- false
UNION
SELECT CAST('true' AS BIT), 'Enterered as CAST(''true'' AS BIT)' -- true