更新 SQL 语句并使用 if 存在

Posted

技术标签:

【中文标题】更新 SQL 语句并使用 if 存在【英文标题】:update SQL statement and using if exists 【发布时间】:2013-03-26 12:02:10 【问题描述】:

我正在尝试从一个表中选择一个值并将其插入到另一个表的特定部分。我有以下 sql (mssql 2008)

if exists (select datesubmitted from JADHist where datesubmitted = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()-1)))

Begin

Select JadOPNTotal from JADhist where dateSubmitted = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()-1))

end

else

begin

Select jadopntotal from JADhist where dateSubmitted = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()-2))

end

这总是检索一个数据类型为 real 的值。我有另一个表,它是 2 列,一个是日期,旁边是小时,接下来的 2 周每个小时都有一个条目。格式为 2013-03-26 01:00:00.000 等等。我想将我从上面的代码中获得的值插入到第二个表中,持续一个 24 小时(24 个条目)。 24 天的时间是今天早上 6 点到明天早上 6 点。

我还有以下代码,其中测试值为 10,只是为了证明代码正确更新了 opndata。

UPDATE [GasNominations].[dbo].[OPNData]
SET 
  [Value] = '10'
WHERE NomSubmittedDate between DATEADD(HH, 6, DATEDIFF(dd, 0, GETDATE())) 
and DATEADD(HH, 5, DATEDIFF(dd, 0, GETDATE()+1))
GO

我想用 if exists 语句替换“10”值,但语法不正确。

【问题讨论】:

【参考方案1】:

试试这个

declare @total varchar(10)

if exists (select datesubmitted from JADHist 
where datesubmitted = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()-1)))
Begin
    Select @total = JadOPNTotal from JADhist 
    where dateSubmitted = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()-1))
end
else
begin
    Select @total = jadopntotal from JADhist 
    where dateSubmitted = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()-2))
end

UPDATE [GasNominations].[dbo].[OPNData]
SET 
  [Value] = @total
WHERE NomSubmittedDate between DATEADD(HH, 6, DATEDIFF(dd, 0, GETDATE())) 
and DATEADD(HH, 5, DATEDIFF(dd, 0, GETDATE()+1))
GO

【讨论】:

以上是关于更新 SQL 语句并使用 if 存在的主要内容,如果未能解决你的问题,请参考以下文章

sql语句 判断表是不是存在

在更新中使用 IF 语句的 PL/SQL

sql to linq中的if存在语句

在 SQL 语句中使用 'If Exists' 两次

UPDATE SQL语句,多条件更新问题?

请教mysql一个sql语句,存在则更新,不存在则插入