T-SQL:在特定时间后停止查询
我希望在t-SQL(MS SQL SMS)中运行一个查询,该查询将在X秒后停止。比如说30秒。我的目标是在6分钟后停止查询。我知道这个问题不正确,但我想给你一个想法T-SQL:在特定时间后停止查询,sql,tsql,Sql,Tsql,我希望在t-SQL(MS SQL SMS)中运行一个查询,该查询将在X秒后停止。比如说30秒。我的目标是在6分钟后停止查询。我知道这个问题不正确,但我想给你一个想法 Select * from DB_Table where (gatedate()+datepart(seconds,'00:00:30')) < getdate() 从DB_表中选择* 其中(gatedate()+datepart(秒,'00:00:30'))
Select * from DB_Table
where (gatedate()+datepart(seconds,'00:00:30')) < getdate()
从DB_表中选择*
其中(gatedate()+datepart(秒,'00:00:30'))
您将使用什么来执行此查询?如果创建.NET应用程序,则存储过程的超时时间为30秒。如果愿意,可以通过更改SqlCommand将超时更改为6分钟。CommandTimeout
在SQL Server Management Studio中,打开选项对话框(工具..选项)。深入到“查询执行/SQL Server/General”。您应该看到如下内容:
执行超时设置是您想要的。值为0指定无限的超时。正值表示超时限制(以秒为单位)
注意:此值“是在执行命令或处理结果期间所有网络读取的累计超时。返回第一行后仍可能发生超时,并且不包括用户处理时间,仅包括网络读取时间。”(根据MSDN)
如果您使用的是ADO.Net(System.Data.SqlClient),那么SqlCommand对象的CommandTimeout属性就是您想要的。连接字符串超时谓词:连接超时
、连接超时
或超时
指定与SQL Server建立连接时等待的时间。这与查询执行无关。是的,让我们试试看
这是一个将运行6分钟的查询:
DECLARE @i INT = 1;
WHILE (@i <= 360)
BEGIN
WAITFOR DELAY '00:00:01'
print FORMAT(GETDATE(),'hh:mm:ss')
SET @i = @i + 1;
END
声明@i INT=1;
WHILE(@i)我从未在任何SQL语句中见过类似的情况。您最好的选择可能是让一个进程调用另一个运行查询的进程,然后在等待6分钟后杀死第二个进程。
-- Put here a part of the code you are targeting or even the whole query
DECLARE @Search_for_query NVARCHAR(300) SET @Search_for_query = '%FORMAT(GETDATE(),''hh:mm:ss'')%'
-- Define the maximum time you want the query to run
DECLARE @Time_to_run_in_minutes INT SET @Time_to_run_in_minutes = 1
DECLARE @SPID_older_than smallint
SET @SPID_older_than = (
SELECT
--text,
session_id
--,start_time
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE text LIKE @Search_for_query
AND text NOT LIKE '%sys.dm_exec_sql_text(sql_handle)%' -- This will avoid the killing job to kill itself
AND start_time < DATEADD(MINUTE, -@Time_to_run_in_minutes, GETDATE())
)
-- SELECT @SPID_older_than -- Use this for testing
DECLARE @SQL nvarchar(1000)
SET @SQL = 'KILL ' + CAST(@SPID_older_than as varchar(20))
EXEC (@SQL)