sql中的if构造

sql中的if构造,sql,tsql,Sql,Tsql,我不擅长t-sql,所以我需要帮助 我有我自己写的代码,但我不知道我想怎么写(对不起,英语) 我该怎么做呢?您不需要临时表 declare @questionid int set @questionid = 22 declare @providerid int set @providerid = 189 declare @closed datetime select @closed = [closed] from [Data].[dbo].[Question] where [question

我不擅长t-sql,所以我需要帮助

我有我自己写的代码,但我不知道我想怎么写(对不起,英语)


我该怎么做呢?

您不需要临时表

declare @questionid int
set @questionid = 22

declare @providerid int
set @providerid = 189

declare @closed datetime
select @closed = [closed] from [Data].[dbo].[Question] where [questionid] = @questionid  

-- and here, if [closed] is null I must write in the question table current date GETDATE()
IF @closed IS NULL
    UPDATE [Data].[dbo].[Question] SET [closed] = GETDATE() WHERE [questionid] = @questionid and [providerid] = @providerid
ELSE
-- or, if [closed] is not null I must write there null
    UPDATE [Data].[dbo].[Question] SET [closed] = null WHERE [questionid] = @questionid and [providerid] = @providerid

我必须说,我不明白你试图实现的逻辑…

当你可以轻松完成任务时,利用
案例

UPDATE [Data].[dbo].[Question] 
SET [closed] = CASE
          WHEN [closed]  is null THEN GetDate()
          ELSE null
          END
WHERE [questionid] = @questionid 
   and [providerid] = @providerid 

我还必须做反向操作。Null到datetime,datetime到Null。AlejoBrz提供了工作代码。最好是在紧凑的情况下使用case…并节省额外的行数,使代码清晰…谢谢,这就是我需要的@闭合变量不是位,而是日期时间。如果用户点击关闭按钮-问题将关闭,如果用户点击同一按钮(另一个文本为“打开”)-问题将打开。谢谢。我编辑了修复变量声明的答案。只是想让您知道,如果if中有多个句子,则必须使用BEGIN和END将它们括起来。同样,在这种情况下,可以使用一个更新而不需要使用IF,正如@PranayRana所说,但是当你问如何使用IF来了解它的用法时,我回答了这个问题。
UPDATE [Data].[dbo].[Question] 
SET [closed] = CASE
          WHEN [closed]  is null THEN GetDate()
          ELSE null
          END
WHERE [questionid] = @questionid 
   and [providerid] = @providerid