【问题标题】:Incorrect syntax near the keyword if关键字 if 附近的语法不正确
【发布时间】:2017-08-17 14:41:57
【问题描述】:

我有下面的 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

谢谢

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    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;
    

    【讨论】:

    • 为了迂腐,IF 是一个表达式,你不能像 OP 那样使用它。 docs.microsoft.com/en-us/sql/t-sql/language-elements/…
    • @Leonidas199x 是迂腐的 IF 是一个语句,而不是一个表达式。表达式返回单个值,其中语句是用于控制流程的表达式、标识符和关键字等元素的集合。
    • @SeanLange 公平点,做得很好。甚至让我自己开口。触摸
    • @Leonidas199x 是的,我在回答中使用 expression 是迂腐的。这并不意味着IF 在 SQL Server 中不存在
    • @Lamak 你把我弄丢了,老豆,OP 没有将 IF 称为表达式?无论如何,这并不重要,我只是想指出 IF 在 T-SQL 中有效并且可以使用,而不是 OP 如何使用它,正如您所解释的那样。
    【解决方案2】:

    您需要使用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 读起来不错:)

    【讨论】:

    • CASE 不是 t-sql 中的语句,它是一个 表达式
    • @Lamak 从未真正考虑到这一点,对其进行了修改
    【解决方案3】:

    (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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-08
      • 2013-12-16
      • 2017-11-22
      • 2018-06-16
      • 2013-10-29
      • 2014-06-22
      • 1970-01-01
      • 2013-05-04
      相关资源
      最近更新 更多