Sql server 选择5分钟内最大行数的存储过程
我有一个用于与另一个服务对话的现有存储过程。 另一个服务每5分钟最多可以处理200个请求,因此存储过程最多可以处理200行Sql server 选择5分钟内最大行数的存储过程,sql-server,Sql Server,我有一个用于与另一个服务对话的现有存储过程。 另一个服务每5分钟最多可以处理200个请求,因此存储过程最多可以处理200行 SELECT TOP 200 column1 as 'MESSAGE_A' , column2 as 'MESSAGE_B' , column3 as 'MESSAGE_C' , CAST(request as xml) FROM [table] ORDER BY [priority]
SELECT TOP 200
column1 as 'MESSAGE_A'
, column2 as 'MESSAGE_B'
, column3 as 'MESSAGE_C'
, CAST(request as xml)
FROM [table]
ORDER BY [priority] ASC, column1 ASC
FOR XML PATH ('result_xml'), TYPE, ROOT ('requests')
问题是,虽然过程每5分钟自动运行一次,但也可以手动运行(因为客户端)
如果手动执行提示请求超过200个,则第三方将被阻止,进程将崩溃
如何添加检查,使其在5分钟的时间范围内最多选择200行?对于我们所做的相同操作(我们使用SSIS包每5分钟自动处理一次数据,有时需要手动运行该包),通过添加列isprocessed(默认为false)
无论是手动还是自动,它都设置为true。因此,下一次当我们记录时,请删除isprocessed=true数据。对于我们所做的相同操作(我们使用SSIS包每5分钟自动处理一次数据,有时需要手动运行该包),方法是添加一列isprocessed(默认情况下为false)
无论是手动还是自动,它都设置为true。因此,下次我们获取记录时,请删除isprocessed=true数据。我需要验证语法,但您的存储过程如下所示:
CREATE Procedure GetBatch AS
DECLARE @Rows INT
SELECT @Rows = 200 - Count(*) FROM [table] WHERE IsProcessing = 0
UPDATE TOP (@Rows) [table]
SET IsProcessing = 1
OUTPUT
INSERTED.column1 as 'MESSAGE_A'
, INSERTED.column2 as 'MESSAGE_B'
, INSERTED.column3 as 'MESSAGE_C'
, CAST(INSERTED.request as xml)
ORDER BY [priority] ASC, column1 ASC
FOR XML PATH ('result_xml'), TYPE, ROOT ('requests')
WHERE IsProcessing = 0
SQL Server中的一个巧妙技巧是,可以使用OUTPUT子句组合SELECT语句和UPDATE语句
请注意,您希望将其作为可序列化事务运行。否则,您可能仍然会抓取太多行
更多信息:我需要验证语法,但您的存储过程如下所示:
CREATE Procedure GetBatch AS
DECLARE @Rows INT
SELECT @Rows = 200 - Count(*) FROM [table] WHERE IsProcessing = 0
UPDATE TOP (@Rows) [table]
SET IsProcessing = 1
OUTPUT
INSERTED.column1 as 'MESSAGE_A'
, INSERTED.column2 as 'MESSAGE_B'
, INSERTED.column3 as 'MESSAGE_C'
, CAST(INSERTED.request as xml)
ORDER BY [priority] ASC, column1 ASC
FOR XML PATH ('result_xml'), TYPE, ROOT ('requests')
WHERE IsProcessing = 0
SQL Server中的一个巧妙技巧是,可以使用OUTPUT子句组合SELECT语句和UPDATE语句
请注意,您希望将其作为可序列化事务运行。否则,您可能仍然会抓取太多行
更多信息:如果可以跟踪调用服务的时间,则保留按日期调用的服务日志。通过这种方式,您可以防止在5分钟内调用超过200个限制的服务。如果可以跟踪调用服务的时间,请按日期保存调用服务的日志。这样,您可以防止呼叫服务,如果它超过200限制,直到5分钟。