Skip to content

Commit a2498a7

Browse files
Update sp_BlitzLock.sql
Fixes #3789
1 parent d76b383 commit a2498a7

1 file changed

Lines changed: 52 additions & 37 deletions

File tree

sp_BlitzLock.sql

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -784,50 +784,65 @@ BEGIN
784784
IF @Debug = 1 BEGIN PRINT @StringToExecute; END;
785785
EXECUTE sys.sp_executesql
786786
@StringToExecute;
787+
END;
788+
789+
/*
790+
Check for BlitzLockFindings table - runs regardless of whether main table existed
791+
This was moved outside the ELSE block to fix issue where pre-existing deadlocks
792+
table would skip BlitzLockFindings creation, causing synonym errors
793+
Must filter by schema to avoid finding table in wrong schema
794+
Note: @OutputSchemaName is already QUOTENAMEd at this point, so use PARSENAME to get raw name
795+
*/
796+
SET @r = NULL; /*Reset - SELECT with no rows doesn't overwrite variable*/
797+
798+
SELECT
799+
@StringToExecute =
800+
N'SELECT @r = o.name FROM ' +
801+
@OutputDatabaseName +
802+
N'.sys.objects AS o
803+
INNER JOIN ' +
804+
@OutputDatabaseName +
805+
N'.sys.schemas AS s
806+
ON o.schema_id = s.schema_id
807+
WHERE o.type_desc = N''USER_TABLE''
808+
AND o.name = N''BlitzLockFindings''
809+
AND s.name = N''' +
810+
PARSENAME(@OutputSchemaName, 1) +
811+
N'''',
812+
@StringToExecuteParams =
813+
N'@r sysname OUTPUT';
814+
815+
IF @Debug = 1 BEGIN PRINT @StringToExecute; END;
816+
EXECUTE sys.sp_executesql
817+
@StringToExecute,
818+
@StringToExecuteParams,
819+
@r OUTPUT;
787820

788-
/*table created.*/
821+
IF (@r IS NULL) /*if table does not exist*/
822+
BEGIN
789823
SELECT
824+
@OutputTableFindings =
825+
QUOTENAME(N'BlitzLockFindings'),
790826
@StringToExecute =
791-
N'SELECT @r = o.name FROM ' +
827+
N'USE ' +
792828
@OutputDatabaseName +
793-
N'.sys.objects AS o
794-
WHERE o.type_desc = N''USER_TABLE''
795-
AND o.name = N''BlitzLockFindings''',
796-
@StringToExecuteParams =
797-
N'@r sysname OUTPUT';
829+
N';
830+
CREATE TABLE ' +
831+
@OutputSchemaName +
832+
N'.' +
833+
@OutputTableFindings +
834+
N' (
835+
ServerName nvarchar(256),
836+
check_id INT,
837+
database_name nvarchar(256),
838+
object_name nvarchar(1000),
839+
finding_group nvarchar(100),
840+
finding nvarchar(4000)
841+
);';
798842

799843
IF @Debug = 1 BEGIN PRINT @StringToExecute; END;
800844
EXECUTE sys.sp_executesql
801-
@StringToExecute,
802-
@StringToExecuteParams,
803-
@r OUTPUT;
804-
805-
IF (@r IS NULL) /*if table does not exist*/
806-
BEGIN
807-
SELECT
808-
@OutputTableFindings =
809-
QUOTENAME(N'BlitzLockFindings'),
810-
@StringToExecute =
811-
N'USE ' +
812-
@OutputDatabaseName +
813-
N';
814-
CREATE TABLE ' +
815-
@OutputSchemaName +
816-
N'.' +
817-
@OutputTableFindings +
818-
N' (
819-
ServerName nvarchar(256),
820-
check_id INT,
821-
database_name nvarchar(256),
822-
object_name nvarchar(1000),
823-
finding_group nvarchar(100),
824-
finding nvarchar(4000)
825-
);';
826-
827-
IF @Debug = 1 BEGIN PRINT @StringToExecute; END;
828-
EXECUTE sys.sp_executesql
829-
@StringToExecute;
830-
END;
845+
@StringToExecute;
831846
END;
832847

833848
/*create synonym for deadlockfindings.*/

0 commit comments

Comments
 (0)