2012-10-03 16 views
1

我有一個簡單的表中定義爲SQL Server的VARCHAR平等測試給出語法錯誤

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運行SQL Server 2005」,或「」(這個人是不是NULL)

我需要一個布爾標誌,如果TAX_TYPE是「W」,所以我有SQL:

select iif(tax_type = 'W',1,0) FROM dbo.ap_purchases_tax_det; 

當我運行此我得到「不正確的語法靠近'='。「。即使是簡單的也會發生這種情況。平等測試似乎在WHERE子句中工作,但我需要一個標誌,這意味着我將不得不將UNION放在一起2選擇。這實際上是一個連接的一部分,它是一個更大的語句中的子查詢,所以我不想這樣做。我已經嘗試tax_type = cast('W' as varchar(2))無濟於事。如果我使用ISNULL(tax_type,'x'),結果相同。

我不知道爲什麼測試平等不起作用,有人可以提供指導?

回答

1

一般來說,寫IIF這樣之前的SQL Server 2012的

select case when tax_type = 'W' then 1 else 0 end 
FROM dbo.ap_purchases_tax_det; 

CASE語句有另一種形式,但這就像C#/ Java中的SWITCH語句或MS Ac中的SELECT CASE這不是一般的條件。約IIF (Transact-SQL)

IIF

兩個重要的注意事項是用於編寫CASE語句的簡便方法。
是IIF翻譯成情況下,其實...

所以,當你寫

IIF ({condition} , {true} , {false}) 

SQL Server查詢優化器從字面上看

CASE WHEN {condition} THEN {true} ELSE {false} END 

FYI您可以完全避免使用CASE語句這

SELECT 1-sign(abs(ascii('W')-ascii(tax_type+'.'))) 

只是一個想法。

2

不能在2005年SQL使用IIF因爲IIF是一個SQL 2012函數只

您需要使用CASE

SELECT CASE tax_type WHEN 'W' THEN 1 ELSE 0 END FROM dbo.ap_purchases_tax_det 
+0

'select tax_type ='W'FROM dbo.ap_purchases_tax_det;'應該返回一個布爾值也不起作用。 –

+1

@ Dr.Drew No. =在select中等同於as - 它命名該列。每次都會返回'W'。只是使用'case'作爲詳細的 – podiluska

+0

所以這就是爲什麼'(CASE WHEN當tax_type ='W「那麼1 ELSE 0 END)'也不會工作?(http://msdn.microsoft.com/en-us/library/ ms181765.aspx顯示'CASE WHEN Boolean_expression THEN result_expression [...因爲你是混合兩種不同類型的報價 –