2013-03-01 4 views
2

내가 원하는 것을 가능하게 만들었는지 모르겠다. 나는 단지 궁금하다.UDT에 대한 여러 입력 유형

나는 허용 값이 내가 알고 싶습니다 무엇

-- 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' 

0과 3 있어야한다는 내용의 규칙과 함께 TINYINT 인 말합니다 MyType의 사용자 정의 형식있어 추가 규칙/기능을 추가하여 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') 

그리고이 초이스 A '또는'A '에서의 1의 값, 초이스 B'또는 제 2의 값 'B', 등, 등 등

에 전환의 일부 유형을

아래 스크립트는 문자열이 허용되는 값으로 변환되는 곳에서 수행하려는 기능과 비슷합니다.

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 

답변

0

아니요, 불행히도 일반 T-SQL에서는 불가능합니다.

sql_variant를 사용하는 CLR 사용자 정의 함수를 만든 다음 그 안에 테스트를 입력 할 수도 있습니다. 그러나 필자는이 함수에 대한 필요성을 질문합니다. 일반적으로 사용자 인터페이스에서 실행되는 코드에서 이러한 종류의 변환을 수행하여 데이터베이스를 제외하고 비즈니스 논리 계층에 도달 할 때까지 고정 데이터 유형을 사용할 준비가됩니다.

덧붙여 말하면 CREATE RULE은 더 이상 사용되지 않으며 '이 기능은 향후 버전에서 제거 될 것입니다.'상태가 오래되었습니다. 지금까지 사용자 정의 유형에 대한 CHECK 제약 조건을 정의 할 수있는 대안을 보지 못했습니다. 이것이 실제로 아직 사용되지 않는 이유 중 일부일 수 있습니다.

관련 문제