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
好极了!现在开始工作了!谢谢你的推荐!真的很有帮助!