伪造一个长期运行的SQL语句

问题描述 投票:10回答:4

我想伪造一个长期运行的SQL语句,以便我可以尝试使用sys.dm_exec_requests

“假”并不是描述它的最佳方式,但是有没有人有可能选择自动生成的记录?也许使用CTE?

sql sql-server
4个回答
21
投票

这是一个长期运行的SQL语句:

WAITFOR DELAY '0:05';

执行大约需要五分钟。


5
投票

在一个查询窗口中,执行以下命令:

BEGIN TRANSACTION

SELECT * from TableY with (XLOCK)

然后,在另一个窗口中,执行尝试访问TableY的任何(*)查询。它会一直运行,直到你关闭第一个窗口或执行ROLLBACKCOMMIT

(*)假设您没有在引用NOLOCK时添加TableY提示。


1
投票

就像我写“CTE”一样......它让我思考。稍后快速搜索和http://smehrozalam.wordpress.com/2009/06/09/t-sql-using-common-table-expressions-cte-to-generate-sequences/的变化

--define start and end limits
Declare @start bigint, @end bigint
Select @start=1, @end=99999

;With NumberSequence( Number ) as
(
    Select @start as Number
        union all
    Select Number + 1
        from NumberSequence
        where Number < @end
)

--select result
Select * From NumberSequence Option (MaxRecursion 0)

0
投票

我非常喜欢Alex KeySmith的CTE答案https://stackoverflow.com/a/14138219/318411,因为你可以将它应用到你自己的查询中;这意味着您可以以长时间运行的形式返回有效数据。

因此,例如,如果您有一个包含几行的测试表,但您希望快速了解应用程序代码对大型结果集的执行情况,则可以执行以下操作:

    declare @i int, @c int
    select @i = 1, @c = 10;
    with X as (
        select @i as N union all select N + 1 from x where N < @c
    )
    select 
        T.*
    from
        X,
    (   
        select 
            *
        from
            MySmallTestTable
    ) AS T
    option (MaxRecursion 0)

这将重复测试数据@c次。

我也用它来测试查询取消代码。

© www.soinside.com 2019 - 2024. All rights reserved.