@@ -9,12 +9,12 @@ ALTER PROCEDURE dbo.sp_kill
99 @AppName NVARCHAR (256 ) = NULL ,
1010 @DatabaseName NVARCHAR (256 ) = NULL ,
1111 @HostName NVARCHAR (256 ) = NULL ,
12- @LeadBlockers VARCHAR (1 ) = ' N' ,
13- @ReadOnly VARCHAR (1 ) = ' N' ,
12+ @LeadBlockers VARCHAR (1 ) = NULL ,
13+ @ReadOnly VARCHAR (1 ) = NULL ,
1414 @OrderBy VARCHAR (20 ) = ' duration' ,
15- @SPIDState VARCHAR (1 ) = ' ' ,
16- @OmitLogin NVARCHAR (256 ) = ' ' ,
17- @HasOpenTran VARCHAR (1 ) = ' ' ,
15+ @SPIDState VARCHAR (1 ) = NULL ,
16+ @OmitLogin NVARCHAR (256 ) = NULL ,
17+ @HasOpenTran VARCHAR (1 ) = NULL ,
1818 @RequestsOlderThanMinutes INT = NULL ,
1919 @OutputDatabaseName NVARCHAR (256 ) = NULL ,
2020 @OutputSchemaName NVARCHAR (256 ) = NULL ,
@@ -109,22 +109,22 @@ Parameters:
109109 @HostName NVARCHAR(256) = NULL
110110 Kill sessions from this host.
111111
112- @LeadBlockers VARCHAR(1) = '' N' '
112+ @LeadBlockers VARCHAR(1) = NULL
113113 Y = kill only lead blockers (sessions blocking others but not blocked themselves).
114114
115- @ReadOnly VARCHAR(1) = '' N' '
115+ @ReadOnly VARCHAR(1) = NULL
116116 Y = only kill read-only queries (SELECT with no writes).
117117
118118 @OrderBy VARCHAR(20) = '' duration''
119119 Sort order for kill recommendations: duration, cpu, reads, writes, tempdb, transactions.
120120
121- @SPIDState VARCHAR(1) = '' ' '
122- S = only sleeping sessions, R = only running sessions, empty = both .
121+ @SPIDState VARCHAR(1) = NULL
122+ S = only sleeping sessions, R = only running sessions.
123123
124- @OmitLogin NVARCHAR(256) = '' ' '
124+ @OmitLogin NVARCHAR(256) = NULL
125125 Exclude sessions belonging to this login from kill recommendations.
126126
127- @HasOpenTran VARCHAR(1) = '' ' '
127+ @HasOpenTran VARCHAR(1) = NULL
128128 Y = only target sessions with open transactions.
129129
130130 @RequestsOlderThanMinutes INT = NULL
@@ -143,6 +143,9 @@ Example usage:
143143 -- Just show recommendations, no killing:
144144 EXEC sp_kill;
145145
146+ -- Kill everything (except system sessions, rollbacks, and your own session):
147+ EXEC sp_kill @ExecuteKills = '' Y'' ;
148+
146149 -- Kill all lead blockers:
147150 EXEC sp_kill @LeadBlockers = '' Y'' , @ExecuteKills = '' Y'' ;
148151
@@ -205,12 +208,12 @@ For more info, visit http://FirstResponderKit.org
205208 IF @AppName IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @AppName = N'' ' + REPLACE (@AppName, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
206209 IF @DatabaseName IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @DatabaseName = N'' ' + REPLACE (@DatabaseName, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
207210 IF @HostName IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @HostName = N'' ' + REPLACE (@HostName, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
208- IF @LeadBlockers <> ' N' SET @ParametersUsed = @ParametersUsed + N ' , @LeadBlockers = '' ' + REPLACE (@LeadBlockers, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
209- IF @ReadOnly <> ' N' SET @ParametersUsed = @ParametersUsed + N ' , @ReadOnly = '' ' + REPLACE (@ReadOnly, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
211+ IF @LeadBlockers IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @LeadBlockers = '' ' + REPLACE (@LeadBlockers, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
212+ IF @ReadOnly IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @ReadOnly = '' ' + REPLACE (@ReadOnly, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
210213 IF @OrderBy <> ' duration' SET @ParametersUsed = @ParametersUsed + N ' , @OrderBy = N'' ' + REPLACE (@OrderBy, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
211- IF @SPIDState <> ' ' SET @ParametersUsed = @ParametersUsed + N ' , @SPIDState = '' ' + REPLACE (@SPIDState, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
212- IF @OmitLogin <> ' ' SET @ParametersUsed = @ParametersUsed + N ' , @OmitLogin = N'' ' + REPLACE (@OmitLogin, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
213- IF @HasOpenTran <> ' ' SET @ParametersUsed = @ParametersUsed + N ' , @HasOpenTran = '' ' + REPLACE (@HasOpenTran, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
214+ IF @SPIDState IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @SPIDState = '' ' + REPLACE (@SPIDState, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
215+ IF @OmitLogin IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @OmitLogin = N'' ' + REPLACE (@OmitLogin, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
216+ IF @HasOpenTran IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @HasOpenTran = '' ' + REPLACE (@HasOpenTran, N ' '' ' , N ' '' '' ' ) + N ' '' ' ;
214217 IF @RequestsOlderThanMinutes IS NOT NULL SET @ParametersUsed = @ParametersUsed + N ' , @RequestsOlderThanMinutes = ' + CAST (@RequestsOlderThanMinutes AS NVARCHAR (10 ));
215218
216219 /* -------------------------------------------------------
@@ -222,27 +225,27 @@ For more info, visit http://FirstResponderKit.org
222225 RETURN ;
223226 END ;
224227
225- IF @LeadBlockers NOT IN ( ' Y', ' N' )
228+ IF @LeadBlockers IS NOT NULL AND @LeadBlockers <> ' Y'
226229 BEGIN
227- RAISERROR (' @LeadBlockers must be Y or N .' , 11 , 1 ) WITH NOWAIT ;
230+ RAISERROR (' @LeadBlockers must be Y or NULL .' , 11 , 1 ) WITH NOWAIT ;
228231 RETURN ;
229232 END ;
230233
231- IF @ReadOnly NOT IN ( ' Y', ' N' )
234+ IF @ReadOnly IS NOT NULL AND @ReadOnly <> ' Y'
232235 BEGIN
233- RAISERROR (' @ReadOnly must be Y or N .' , 11 , 1 ) WITH NOWAIT ;
236+ RAISERROR (' @ReadOnly must be Y or NULL .' , 11 , 1 ) WITH NOWAIT ;
234237 RETURN ;
235238 END ;
236239
237- IF @SPIDState NOT IN (' S' , ' R' , ' ' )
240+ IF @SPIDState IS NOT NULL AND @SPIDState NOT IN (' S' , ' R' )
238241 BEGIN
239- RAISERROR (' @SPIDState must be S (sleeping), R (running), or empty string (both).' , 11 , 1 ) WITH NOWAIT ;
242+ RAISERROR (' @SPIDState must be S (sleeping), R (running), or NULL (both).' , 11 , 1 ) WITH NOWAIT ;
240243 RETURN ;
241244 END ;
242245
243- IF @HasOpenTran NOT IN ( ' Y', ' ' )
246+ IF @HasOpenTran IS NOT NULL AND @HasOpenTran <> ' Y'
244247 BEGIN
245- RAISERROR (' @HasOpenTran must be Y or empty string .' , 11 , 1 ) WITH NOWAIT ;
248+ RAISERROR (' @HasOpenTran must be Y or NULL .' , 11 , 1 ) WITH NOWAIT ;
246249 RETURN ;
247250 END ;
248251
@@ -491,7 +494,8 @@ For more info, visit http://FirstResponderKit.org
491494 END
492495 /* 7c: Otherwise, apply all filters as AND conditions in a single pass.
493496 A session must match ALL specified filters to be recommended for kill.
494- If @ExecuteKills = 'N' and no filters are set, don't recommend anything. */
497+ With no filters, @ExecuteKills = 'Y' kills everything;
498+ @ExecuteKills = 'N' just shows sessions without recommending. */
495499 ELSE
496500 BEGIN
497501 /* When in display mode with no filters, just show sessions without recommending kills */
@@ -500,12 +504,12 @@ For more info, visit http://FirstResponderKit.org
500504 AND @AppName IS NULL
501505 AND @DatabaseName IS NULL
502506 AND @HostName IS NULL
503- AND @LeadBlockers = ' N'
504- AND @ReadOnly = ' N'
505- AND @SPIDState = ' '
506- AND @HasOpenTran = ' '
507+ AND @LeadBlockers IS NULL
508+ AND @ReadOnly IS NULL
509+ AND @SPIDState IS NULL
510+ AND @HasOpenTran IS NULL
507511 AND @RequestsOlderThanMinutes IS NULL
508- AND @OmitLogin = ' '
512+ AND @OmitLogin IS NULL
509513 BEGIN
510514 /* No filters in display mode - nothing to recommend */
511515 IF @Debug = 1
@@ -522,12 +526,12 @@ For more info, visit http://FirstResponderKit.org
522526 AND (@AppName IS NULL OR program_name LIKE @AppName)
523527 AND (@DatabaseName IS NULL OR database_name = @DatabaseName)
524528 AND (@HostName IS NULL OR host_name = @HostName)
525- AND (@ReadOnly = ' N' OR is_read_only = 1 )
526- AND (@SPIDState = ' ' OR (@SPIDState = ' S' AND [status] = ' sleeping' ) OR (@SPIDState = ' R' AND [status] = ' running' ))
527- AND (@HasOpenTran = ' ' OR ISNULL (open_transaction_count, 0 ) > 0 )
529+ AND (@ReadOnly IS NULL OR is_read_only = 1 )
530+ AND (@SPIDState IS NULL OR (@SPIDState = ' S' AND [status] = ' sleeping' ) OR (@SPIDState = ' R' AND [status] = ' running' ))
531+ AND (@HasOpenTran IS NULL OR ISNULL (open_transaction_count, 0 ) > 0 )
528532 AND (@RequestsOlderThanMinutes IS NULL OR last_request_start_time <= DATEADD (MINUTE, - @RequestsOlderThanMinutes, GETDATE ()))
529- AND (@OmitLogin = ' ' OR login_name <> @OmitLogin)
530- AND (@LeadBlockers = ' N' OR (
533+ AND (@OmitLogin IS NULL OR login_name <> @OmitLogin)
534+ AND (@LeadBlockers IS NULL OR (
531535 EXISTS (SELECT 1 FROM #hitlist blocked WHERE blocked .blocking_session_id = h .session_id )
532536 AND (h .blocking_session_id IS NULL OR h .blocking_session_id = 0 )
533537 ));
0 commit comments