如果某事是真的,则声明变量

时间:2014-09-15 18:20:47

标签: sql variables if-statement

当我尝试执行此代码以设置变量时,我收到一条错误消息:

DECLARE
      @timenow DATETIME = GETDATE()
          ,@WEEKDAY nvarchar(10) = DATENAME(DW,GETDATE())   
IF DATENAME(DW,GETDATE()) = 'MONDAY'
DECLARE @Fecha_222 DATETIME SET @Fecha_222 = @timenow-3
ELSE 
SET @Fecha_222 = @timenow-1

我想设置变量@ Fecha_222来修复之前的日期。如果它是星期一然后给我星期五的日期,如果不是..前一天给我。 我收到错误消息说关键字else附近的sintax不正确。 代码中出了什么问题?我真的很感谢你的帮助!! 非常感谢提前!

马科斯

3 个答案:

答案 0 :(得分:1)

你有三个问题:
1)如果在另一半中引用,则声明为半数 2)在IF之后你有多行SQL而不使用BEGIN和END
3)这更具外观,但可能导致逻辑问题。您声明@timenow并将其设置为GETDATE(),但在IF中,您没有引用该变量。如果你想模拟不同日期的代码,你可以有多个地方来修复它。

DECLARE
      @timenow DATETIME = GETDATE()
     ,@WEEKDAY nvarchar(10) = DATENAME(DW,GETDATE())   
     ,@Fecha_222 DATETIME

IF DATENAME(DW,@timenow) = 'MONDAY'
   SET @Fecha_222 = @timenow-3
ELSE 
   SET @Fecha_222 = @timenow-1

答案 1 :(得分:0)

将声明移到eIF块之外:

DECLARE
      @timenow DATETIME = GETDATE()
          ,@WEEKDAY nvarchar(10) = DATENAME(DW,GETDATE())   

DECLARE @Fecha_222 DATETIME 

IF DATENAME(DW,GETDATE()) = 'MONDAY'
    SET @Fecha_222 = @timenow-3
ELSE 
    SET @Fecha_222 = @timenow-1

答案 2 :(得分:0)

因为当它进入else条件时它无法找到@ Fecha_222,因为你已经在if条件中声明了它没有被执行。所以你必须在if-else之外声明@ Fecha_222。

DECLARE
      @timenow DATETIME = GETDATE(),
      @WEEKDAY nvarchar(10) = DATENAME(DW,GETDATE(),   
      @Fecha_222 DATETIME

IF DATENAME(DW,GETDATE()) = 'MONDAY'
   SET @Fecha_222 = @timenow-3

ELSE 
   SET @Fecha_222 = @timenow-1