Я в основном пытаюсь использовать команды sql и время ожидания для CPU, и я просто хочу запустить цикл while в течение 60 секунд и вставить все данные в таблицу temp. Я не очень хорош, когда курсоры, или как это сделать в sql.SQL While Loop 60 секунд?
BEGIN CREATE TABLE #DiagTable ( sessionID NVARCHAR (MAX), dbname NVARCHAR (MAX), starttime NVARCHAR (MAX), cmd NVARCHAR (MAX), stat NVARCHAR (MAX), cputime NVARCHAR (MAX), totalelapsedtime NVARCHAR (MAX), reads NVARCHAR (MAX), writes NVARCHAR (MAX), [query] NVARCHAR (MAX) ) DECLARE @id INT DECLARE x CURSOR FOR SELECT 60 OPEN x FETCH NEXT FROM x INTO @id WHILE @@FETCH_STATUS = 0 BEGIN WAITFOR DELAY '000:00:01' -- begin loop here INSERT INTO #DiagTable SELECT a.session_id, db_name (a.database_id) AS db_name, a.start_time, a.command, a.status, a.cpu_time, a.total_elapsed_time, a.reads, a.writes, b.text AS query FROM sys.dm_exec_requests a OUTER APPLY sys.dm_exec_sql_text (a.sql_handle) b WHERE a.session_id > 50 -- filter out background tasks AND a.session_id @@spid -- filter out this query session ORDER BY a.cpu_time DESC; WAITFOR DELAY '00:00:01' FETCH NEXT FROM x INTO @id END CLOSE x DEALLOCATE x -- end loop here SELECT * FROM #DiagTable; DROP TABLE #DiagTable; END
не уверен, если выбрать 60 является то, что я хочу ...
Что значит «цикл while в течение 60 секунд»? Вы хотите, чтобы вы захотели захватить эти данные раз в секунду на 60 секунд (чтобы вы получили 60 наборов запросов)? Или вы хотите записывать эти данные каждые 60 секунд, n раз? –
Вы можете использовать цикл while с WAITFOR http://technet.microsoft.com/en-us/library/ms187331.aspx – EricZ
@AaronBertrand См. Мое редактирование, в основном каждую секунду в течение 1 минуты. Я хочу запустить команду выбора, которая вставляет в таблицу temp –