2017-08-17 47 views
1

我的關鍵字是近以下SQL的語法不正確,如果

DECLARE @ContractTerm int 
Declare @FIELDSSingle varchar(max)  
SET @ContractTerm = 2 

SET @FIELDSSingle += '<td class="HeaderData"> Year ' +If(@ContractTerm = 2)Begin+' This is a sample '+ End + ' </td>' 

select @FIELDSSingle 

我得到一個錯誤,語法錯誤,如果當我運行它。我想在字符串內部是邏輯來隱藏或顯示基於條件的值。可以請某人告訴我我在這裏做錯了什麼。

這裏是SQL Fiddle

感謝

回答

5

IF不能在SQL Server中的表現,你需要使用CASE

DECLARE @ContractTerm int 
Declare @FIELDSSingle varchar(max)  
SET @ContractTerm = 2 

SET @FIELDSSingle += '<td class="HeaderData"> Year ' + 
         CASE WHEN @ContractTerm = 2 THEN ' This is a sample ' ELSE '' End + 
         ' </td>'; 

select @FIELDSSingle; 
+0

這一工程..謝謝 – user1221989

+1

要迂腐,IF是一種表達,你不能像OP那樣使用它。 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/if-else-transact-sql – Leonidas199x

+1

@ Leonidas199x迂腐IF是一個聲明,而不是一個表達式。表達式返回單個值,其中語句是用於控制流的表達式,標識符和關鍵字等元素的集合。 –

1

您需要使用CASE表達式,其本質上是一個IF

DECLARE @ContractTerm INT; 
DECLARE @FIELDSSingle VARCHAR(MAX); 
SET @ContractTerm = 2; 
SET @FIELDSSingle+='<td class="HeaderData"> Year '+CASE 
                 WHEN @ContractTerm = 2 
                 THEN ' This is a sample ' 
                 ELSE '' 
                END+' </td>'; 
SELECT 
    @FIELDSSingle; 

Here是一個非常良好的閱讀:)

+1

CASE不是t-sql中的語句,它是*表達式* – Lamak

+0

@Lamak從來沒有真正地將考慮,修改它 – dbajtr

0

(Lamak的和dbajtr的回答都不錯,但是對於各種我寫這個答案的緣故),您可以按以下打破行:

DECLARE @ContractTerm int 
DECLARE @Counter INT 
Declare @FIELDSSingle varchar(max) 
SET @Counter = 1 
SET @ContractTerm = 2 

SET @FIELDSSingle = '<td class="HeaderData"> Year '; 
If(@ContractTerm = 2) 
Begin 
    set @FIELDSSingle +=' This is a sample '; 
End 
set @FIELDSSingle +='</td>'; 

select @FIELDSSingle