2012-03-26 2 views
0

Я не очень хорошо разбираюсь в t-sql, поэтому мне нужна помощь.если строительство в sql

У меня есть этот код, который я написал сам, но, как пишет, что я хочу, я не знаю (и извините за английский)

declare @questionid int 
set @questionid = 22 

declare @providerid int 
set @providerid = 189 

select [closed] into #question from [Data].[dbo].[Question] where [questionid] = @questionid 

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

-- or, if [closed] is not null I must write there null 
UPDATE [Data].[dbo].[Question] SET [closed] = null WHERE [questionid] = @questionid and [providerid] = @providerid 

drop table #question 

Как я могу это сделать?

+1

его лучше пойти на случай, если что компактный ... и сохранить дополнительную строку и сделать код ясно ... –

+0

@Pranay Рана ты прав – Wachburn

ответ

1

Вам не нужна временная таблица для этого

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 

Я должен сказать, я не понимаю логику вы пытаетесь достичь ...

+0

Спасибо, Это мне нужно. @closed variable isnt бит, его Datetime. Если пользователь клик на кнопке Закрыть - вопрос закроется, если пользователь клик на той же кнопке (с другим текстом «открыт») - откроется вопрос. Благодарю. – Wachburn

+0

Я отредактировал ответ, чтобы зафиксировать объявление переменной. Просто для того, чтобы вы знали, если у вас есть более одного предложения внутри IF, вы должны использовать BEGIN и END для их включения. Кроме того, в этом случае возможно использовать одно единственное UPDATE без необходимости использования IF, как указано в @PranayRana, но, поскольку вы спрашивали, как использовать IF для изучения его использования, я ответил на это. –

+0

вы очень пунктуальный человек) – Wachburn

1

использовать Марк case when вы можете легко достичь своей задачи ..

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

Я тоже должен сделать обратную операцию. От Null до datetime и datetime до null. АлехоБрз дал рабочий код. – Wachburn

Смежные вопросы