SQL - 根据WHERE中的条件更新相同的表

时间:2014-11-18 13:55:50

标签: sql

我需要编写类似下面的SP。从.net Windows服务应用程序每秒调用此SP。

SELECT TOP 1 ID  
  FROM TABLE  
 WHERE GETDATE() < ExpirationDate  
ORDER BY ID  

如果GetDate() > ExpirationDate使用值更新记录列。

我不希望在每次调用SP时执行以下操作,它会查看整个表以进行更新 我只想更新SP目前正在查看的记录。

UPDATE [TableName]   
SET fiel1=1 , field2 = 'abc'  
WHERE ExpirationDate > GETDATE()

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用更新/选择。根据您的SQL实例的配置方式,您可能需要使用下面的第二个示例包装内部选择

UPDATE [TableName] SET [TableName].fiel1= 1 , [TableName].field2 = 'abc'
FROM (
    SELECT TOP 1 ID
     FROM TABLE
     WHERE GETDATE() < ExpirationDate
    ORDER BY ID
) a
where [TableName].ID = a.ID

可能必须尝试这个:

UPDATE [TableName] SET [TableName].fiel1= 1 , [TableName].field2 = 'abc'
FROM (
    SELECT TOP 100 PERCENT * FROM (
          SELECT TOP 1 ID
          FROM TABLE
          WHERE GETDATE() < ExpirationDate
          ORDER BY ID
       ) b
     ) a
where [TableName].ID = a.ID

答案 1 :(得分:0)

这将更新您在原始脚本中返回的单行值:

UPDATE [table]
SET 
    Field1 = 1,
    Field2 = abc
WHERE ID = 
  (
    SELECT MIN(ID)
    FROM [table]
    WHERE GETDATE() < ExpirationDate 
  )