Sql 如果某事物为真,则声明变量

Sql 如果某事物为真,则声明变量,sql,variables,if-statement,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 = @ti

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

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设置为在中间检索te day的日期。如果是星期一,那就给我星期五的日期,如果不是,就给我前一天的日期。 我收到错误消息说sintax不正确。 代码中有什么错误?我将非常感谢你的帮助!! 非常感谢


Marcos

将声明移到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

您有三个问题:
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

这是因为当它在else条件中出现时,它找不到@Fecha_222,因为您在if条件中声明了它,而if条件没有执行。所以你必须在外面声明@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

好极了!现在开始工作了!谢谢你的推荐!真的很有帮助!