2017-08-17 50 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