我需要编写类似下面的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()
提前致谢。
答案 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
)