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 
); 

これはもちろんあるのgitを実行するときに問題を引き起こし/これらの2つのテーブルが等しくないことを示すスキーマの違い。

IIFを「CASE WHEN」以上に使用する「ルール」はありますか?私は常に前者がフラグ/単純なロジックルールを作成するためのより簡潔であることを発見しました。

+2

'CASE'を使用してください。これはANSI標準です。 –

答えて

1

IIFは、MSAccessからSQL Serverへの変換を容易にする構文砂糖です。 SQL Serverは、入力したIIFを構文解析するときに、より一般化されたANSI互換のCASE WHEN構造に変換するだけであることを示している結果からはっきりしています。私はIIFをMS Accessとの間の移植性以外に使用することは決して勧めません。

SQL Serverは、計算された列とチェック制約を書き換えて、無作為な括弧やそのようなものを標準化された形式に単純化することがよくあるので、SSMSからスクリプトを出力すると、あなたのDDLでこれらは明らかに別のケースです。

関連する問題