Я не знаю, возможно ли то, что я хочу сделать, или нет, и мне просто интересно.Несколько типов ввода для UDT
У меня опред.польз.имя Тип скажем MyType который является TINYINT наряду с правилом, которое гласит, что значение допустимого должно быть между 0 и 3.
-- 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, 'Выбор 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