Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 选择5分钟内最大行数的存储过程_Sql Server - Fatal编程技术网

Sql server 选择5分钟内最大行数的存储过程

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]

我有一个用于与另一个服务对话的现有存储过程。 另一个服务每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] 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分钟。