次のように定義された SQL Server 2005 で実行されている単純なテーブルがあります。
CREATE TABLE [dbo].[ap_purchases_tax_det](
[invoice_s] [int] NOT NULL,
[line_num] [smallint] NOT NULL,
[tax_code] [varchar](10) NOT NULL,
[tax_type] [varchar](2) NULL,
[tax_det_s] [int] IDENTITY(1,1) NOT NULL,
[old_entity] [varchar](14) NULL,
[old_cc_code] [varchar](5) NULL,
[old_vendor] [varchar](15) NULL,
[old_invoice] [varchar](20) NULL,
[citi] [varchar](1) NULL,
CONSTRAINT [aaaaaap_purchases_tax_det_PK] PRIMARY KEY NONCLUSTERED
(
[invoice_s] ASC,
[line_num] ASC,
[tax_code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
tax_type フィールドには、「W」、「V」、「B」、または「」が入力されます (これは NULL ではありません)。
tax_type が「W」の場合、ブール値のフラグを取得する必要があるため、次の SQL があります。
select iif(tax_type = 'W',1,0) FROM dbo.ap_purchases_tax_det;
これを実行すると、「'=' 付近の構文が正しくありません。」というメッセージが表示されます。これは単純なtax_type = 'W'
. 等しいかどうかのテストは WHERE 句で機能しているようですが、フラグが必要です。つまり、2 つの選択を一緒に UNION する必要があります。これは実際には、はるかに大きなステートメントのサブクエリである結合の一部であるため、これを行いたくありません。私は明示的にキャストしようとしましたが、役に立ちtax_type = cast('W' as varchar(2))
ませんでした。を使用しても同じ結果になりますISNULL(tax_type,'x')
。
平等のテストが機能しない理由がわかりません。誰かがガイダンスを提供できますか?