2017-03-11 1 views
0

SQL Server 2012를 실행 중이고 테이블 정의에서 IIF을 사용하여 서버가 CASE WHEN 문으로 테이블 정의를 확인했습니다.테이블 정의의 IIF는 사례 변환

T_TABLE.sql

CREATE TABLE [dbo].[T_TABLE] (
    [ID] INT IDENTITY (1, 1) NOT NULL, 
    [FLG] AS (IIF ([COL1] = [COL2] AND [STATUS] <> 'FAIL', 1, 0)), 
    [COL1] INT NULL, 
    [COL2] INT NULL, 
    [STATUS] VARCHAR (2000) NULL 
); 

다음 내가 스크립트에 테이블 정의를 SSMS를 사용하여 얻을 데이터베이스에이 코드를 실행 한 후 :

CREATE TABLE [dbo].[T_TABLE] (
    [ID] INT IDENTITY (1, 1) NOT NULL, 
    [FLG] AS (case when [COL1]=[COL2] AND [STATUS]<>'FAIL' then (1) else (0) end), 
    [COL1] INT NULL, 
    [COL2] INT NULL, 
    [STATUS] VARCHAR (2000) NULL 
); 

이는 물론이고 자식을 실행할 때 문제가 발생/schema diffs는이 두 테이블이 동일하지 않음을 나타냅니다.

CASE WHEN에 대해 IIF을 사용하는 것에 대한 "규칙"이 있습니까? 필자는 항상 전자가 플래그/간단한 논리 규칙을 만드는 데보다 간결하다는 것을 알았습니다.

+2

그냥 '사례'를 사용하십시오. ANSI 표준입니다. –

답변

1

IIF은 MSAccess를 SQL Server로 쉽게 변환하기위한 구문 설탕입니다. SQL Server가 입력 한 IIF을 구문 분석 할 때 좀 더 일반화되고 ANSI와 호환되는 CASE WHEN 구조로 변환한다는 것을 보여주는 결과는 매우 분명합니다. IIF을 MS Access와의 이식성 이외의 용도로 사용하지 않는 것이 좋습니다.

SQL Server에서는 계산 된 열과 CHECK 제약 조건을 다시 작성하여 표준화 된 양식에 간단한 괄호와 같은 것을 단순화하므로 SSMS에서 스크립트를 작성할 때 입력 한 것과 동일하지 않을 수 있습니다 DDL에 이것은 분명히 그 중 하나입니다.