dbo.QBM_PConstraintFKDrop
Stored ProcedureSQL_STORED_PROCEDURESandbox DB
Interpretation
- Database routine. Review parameters, called procedures, DBQueue inserts, and QBM_PJobCreate helper calls before assuming side effects.
Relations
- No extracted relations.
Typed Edges
- references source dbo.QBM_FCVIntToString source text reference
- references source dbo.QBM_FGIObjectIsDropable source text reference
- references source dbo.QBM_FGISessionErrorIsDeadlock source text reference
- references source dbo.QBM_FGISessionErrorRethrow source text reference
- references source dbo.QBM_PExecuteSQLWithRetry_LLP source text reference
- references source dbo.QBM_PJournal source text reference
- references source dbo.QBM_PSessionErrorAdd source text reference
- references source dbo.QBM_PSessionErrorClean source text reference
Complete Source
1CREATE PROCEDURE QBM_PConstraintFKDrop(2 @tablepattern nvarchar(64),3 @ConstraintPattern nvarchar(64),4 @ParentTablePattern nvarchar(64) = '%'5)6AS7BEGIN8 DECLARE @TableName varchar(64)9 DECLARE @constraintname varchar(64)10 DECLARE @ownername varchar(64)11 DECLARE @sqlcmd nvarchar(max)12 DECLARE @lauf int = 113 DECLARE @ErrorMessage nvarchar(4000)14 DECLARE @ErrorSeverity int15 DECLARE @ErrorState int16 DECLARE @LockRetry BIT17 DECLARE @DebugLevel char(1) = 'W'18 DECLARE @DebugSwitch int = 019 DECLARE @MessageType varchar(1) = 'W'20 DECLARE @elementsToDrop TABLE(TableName varchar(64) collate database_default,21 ConstraintName varchar(64) collate database_default,22 OwnerName varchar(64) collate database_default)23 DECLARE @ElementsAffected int = 024 DECLARE @JournalMessage nvarchar(1000)25 DECLARE @JournalProcedureExists BIT = 026 DECLARE @CountElementsChanged int = 027 DECLARE @FehlerAufgetreten BIT = 028 SET XACT_ABORT OFF29 BEGIN TRY30 IF EXISTS(31 SELECT TOP 1 132 FROM sys.objects o33 WHERE34 o.name = 'QBM_PJournal' AND type = 'P')35 BEGIN36 SELECT @JournalProcedureExists = 137 END38 IF EXISTS(39 SELECT TOP 1 140 FROM sys.tables t41 WHERE42 t.name = 'DialogTable' collate database_default)43 BEGIN44 SELECT45 @SQLcmd = '46 select c.name, fk.name, o.name47 from sys.foreign_keys fk join sys.objects c on c.object_id = fk.parent_object_id48 join sys.objects p on p.object_id = fk.referenced_object_id49 join sys.schemas o on c.schema_id = o.schema_id50 and dbo.QBM_FGIObjectIsDropable (o.schema_id)=151 join DialogTable dt with (readpast) on c.name = dt.TableName collate database_default52 where fk.type = ''F''53 and fk.name like '''54 + @Constraintpattern + ''' collate database_default55 and c.name like ''' + @Tablepattern+ ''' collate database_default56 and p.name like '''57 + @ParentTablePattern+ ''' collate database_default58 '59 END60 ELSE61 BEGIN62 SELECT63 @SQLcmd = '64 select c.name, fk.name, o.name65 from sys.foreign_keys fk join sys.objects c on c.object_id = fk.parent_object_id66 join sys.objects p on p.object_id = fk.referenced_object_id67 join sys.schemas o on c.schema_id = o.schema_id68 and dbo.QBM_FGIObjectIsDropable (o.schema_id)=169 and o.name = ''dbo'' collate database_default70 where fk.type = ''F'' collate database_default71 and fk.name like '''72 + @Constraintpattern + ''' collate database_default73 and c.name like ''' + @Tablepattern+ ''' collate database_default74 and p.name like '''75 + @ParentTablePattern+ ''' collate database_default76 '77 END78 IF @DebugSwitch > 079 BEGIN80 print @sqlcmd81 END82 INSERT INTO @elementsToDrop(TableName,83 ConstraintName,84 OwnerName)85 EXEC sp_executesql @sqlcmd86 SELECT @ElementsAffected = @@ROWCOUNT87 SELECT @LockRetry = 588 WHILE @LockRetry > 089 BEGIN90 SELECT @lauf = 191 SELECT @constraintname = '#'92 WHILE @constraintname > ' ' AND @lauf > 093 BEGIN94 SELECT @constraintname = NULL95 SELECT96 TOP 1 @constraintname = td.ConstraintName,97 @ownerName = td.OwnerName,98 @TableName = td.TableName99 FROM @elementsToDrop td100 IF @constraintname IS NULL101 BEGIN102 SELECT @lauf = 0103 SELECT @LockRetry = 0 CONTINUE104 END105 SELECT106 @sqlcmd = CONCAT(N 'alter table ',107 @ownername,108 '.',109 @TableName,110 N ' drop constraint ',111 ' if exists ',112 @Constraintname,113 nchar(13),114 nchar(10))115 IF @JournalProcedureExists = 1116 BEGIN117 EXEC QBM_PJournal @SQLcmd,118 @@PROCID,119 'D',120 @DebugLevel121 END122 IF @DebugSwitch > 0123 BEGIN124 print @sqlcmd125 END126 BEGIN TRY127 EXEC QBM_PExecuteSQLWithRetry_LLP @SQLStatement = @SQLcmd,128 @LockTimeout_ms = 2500,129 @MaxWaitTimeForLock_s = 15.0,130 @ProcIDForJournal = DEFAULT,131 @HandleErrorSilent = 0,132 @DeadlockPriority = 5,133 @ExecuteWithTransact = 0134 DELETE @elementsToDrop135 FROM @elementsToDrop td136 WHERE137 td.TableName = @TableName AND td.ConstraintName = @constraintname AND td.OwnerName = @ownerName138 SELECT @CountElementsChanged += 1139 EXEC QBM_PSessionErrorClean140 END TRY141 BEGIN CATCH142 EXEC QBM_PSessionErrorAdd DEFAULT,143 @sqlcmd144 IF dbo.QBM_FGISessionErrorIsDeadlock(DEFAULT) = 1145 BEGIN146 SELECT @LockRetry -= 1147 IF @JournalProcedureExists = 1148 BEGIN149 EXEC QBM_PJournal 'SessionError',150 @@PROCID,151 'W',152 @DebugLevel153 END154 SELECT @Errormessage = NULL waitfor delay '00:00:00.500'155 END156 ELSE157 BEGIN158 SELECT @FehlerAufgetreten = 1159 IF @JournalProcedureExists = 1160 BEGIN161 EXEC QBM_PJournal 'SessionError',162 @@PROCID,163 'E',164 @DebugLevel165 END166 SELECT @lauf = 0167 SELECT @LockRetry = 0168 END169 END CATCH170 END171 END172 IF @CountElementsChanged > 0 AND @JournalProcedureExists = 1173 BEGIN174 SELECT175 @JournalMessage = '#LDS#System elements modified by {0}, pattern {1}, elements affected {2}.|' + isnull(OBJECT_NAME(@@procid),176 '') + '|' + @tablepattern + '|' + dbo.QBM_FCVIntToString(@CountElementsChanged) + '|'177 IF NOT EXISTS(178 SELECT TOP 1 1179 FROM DialogDatabase180 WHERE181 IsMainDatabase = 1 AND UpdatePhase <> 0) AND NOT EXISTS(182 SELECT TOP 1 1183 FROM sys.tables t184 WITH(readpast)185 JOIN sys.columns c186 WITH(readpast)187 ON t.object_id = c.object_id188 WHERE189 t.name = 'DialogDatabase' AND c.name = 'InitialMigrationRunning')190 BEGIN191 EXEC QBM_PJournal @JournalMessage,192 @@procid,193 @MessageType,194 @DebugLevel,195 20196 END197 ELSE198 BEGIN199 EXEC QBM_PJournal @JournalMessage,200 @@procid,201 'I',202 'I'203 END204 END205 END TRY206 BEGIN CATCH207 EXEC QBM_PSessionErrorAdd DEFAULT208 END CATCH209 IF @FehlerAufgetreten = 1210 BEGIN211 DECLARE @Rethrow varchar(1000) = dbo.QBM_FGISessionErrorRethrow()212 RAISERROR(@Rethrow,213 18,214 1)215 WITH NOWAIT216 END217END
Open raw exported source
1 create procedure QBM_PConstraintFKDrop (@tablepattern nvarchar(64), @ConstraintPattern nvarchar(64), @ParentTablePattern nvarchar(64) = '%'2 ) as begin declare @TableName varchar(64) declare @constraintname varchar(64) declare @ownername varchar(64) declare @sqlcmd nvarchar(max) declare @lauf3 int = 1 declare @ErrorMessage nvarchar(4000) declare @ErrorSeverity int declare @ErrorState int declare @LockRetry bit declare @DebugLevel char(1) = 'W'4 declare @DebugSwitch int = 0 declare @MessageType varchar(1) = 'W' declare @elementsToDrop table (TableName varchar(64) collate database_default , ConstraintName5 varchar(64) collate database_default , OwnerName varchar(64) collate database_default ) declare @ElementsAffected int = 0 declare @JournalMessage nvarchar6(1000) declare @JournalProcedureExists bit = 0 declare @CountElementsChanged int = 0 declare @FehlerAufgetreten bit = 0 SET XACT_ABORT OFF BEGIN TRY if7 exists (select top 1 1 from sys.objects o where o.name = 'QBM_PJournal' and type = 'P' ) begin select @JournalProcedureExists = 1 end if exists (select8 top 1 1 from sys.tables t where t.name = 'DialogTable' collate database_default ) begin select @SQLcmd = '9 select c.name, fk.name, o.name10 from sys.foreign_keys fk join sys.objects c on c.object_id = fk.parent_object_id11 join sys.objects p on p.object_id = fk.referenced_object_id12 join sys.schemas o on c.schema_id = o.schema_id13 and dbo.QBM_FGIObjectIsDropable (o.schema_id)=114 join DialogTable dt with (readpast) on c.name = dt.TableName collate database_default15 where fk.type = ''F''16 and fk.name like '''17 + @Constraintpattern + ''' collate database_default18 and c.name like ''' + @Tablepattern+ ''' collate database_default19 and p.name like ''' 20+ @ParentTablePattern+ ''' collate database_default21 ' end else begin select @SQLcmd = '22 select c.name, fk.name, o.name23 from sys.foreign_keys fk join sys.objects c on c.object_id = fk.parent_object_id24 join sys.objects p on p.object_id = fk.referenced_object_id25 join sys.schemas o on c.schema_id = o.schema_id26 and dbo.QBM_FGIObjectIsDropable (o.schema_id)=127 and o.name = ''dbo'' collate database_default28 where fk.type = ''F'' collate database_default29 and fk.name like '''30 + @Constraintpattern + ''' collate database_default31 and c.name like ''' + @Tablepattern+ ''' collate database_default32 and p.name like ''' 33+ @ParentTablePattern+ ''' collate database_default34 ' end if @DebugSwitch > 0 begin print @sqlcmd end insert into @elementsToDrop(TableName, ConstraintName35, OwnerName) exec sp_executesql @sqlcmd select @ElementsAffected = @@ROWCOUNT select @LockRetry = 5 while @LockRetry > 0 begin select @lauf = 1 select36 @constraintname = '#' while @constraintname > ' ' and @lauf > 0 begin select @constraintname = null select top 1 @constraintname = td.ConstraintName ,37 @ownerName = td.OwnerName , @TableName = td.TableName from @elementsToDrop td if @constraintname is null begin select @lauf = 0 select @LockRetry = 0 38continue end select @sqlcmd = concat( N'alter table ' , @ownername , '.' , @TableName , N' drop constraint ' , ' if exists ' , @Constraintname , nchar39(13) , nchar(10) ) if @JournalProcedureExists = 1 begin exec QBM_PJournal @SQLcmd, @@PROCID, 'D', @DebugLevel end if @DebugSwitch > 0 begin print @sqlcmd40 end BEGIN TRY exec QBM_PExecuteSQLWithRetry_LLP @SQLStatement = @SQLcmd , @LockTimeout_ms = 2500 , @MaxWaitTimeForLock_s = 15.0 , @ProcIDForJournal =41 default , @HandleErrorSilent = 0 , @DeadlockPriority = 5 , @ExecuteWithTransact = 0 delete @elementsToDrop from @elementsToDrop td where td.TableName42 = @TableName and td.ConstraintName = @constraintname and td.OwnerName = @ownerName select @CountElementsChanged += 1 exec QBM_PSessionErrorClean END TRY43 BEGIN CATCH exec QBM_PSessionErrorAdd default, @sqlcmd if dbo.QBM_FGISessionErrorIsDeadlock(default) = 1 begin select @LockRetry -= 1 if @JournalProcedureExists44 = 1 begin exec QBM_PJournal 'SessionError', @@PROCID, 'W', @DebugLevel end select @Errormessage = null waitfor delay '00:00:00.500' end else begin select45 @FehlerAufgetreten = 1 if @JournalProcedureExists = 1 begin exec QBM_PJournal 'SessionError', @@PROCID, 'E', @DebugLevel end select @lauf = 0 select @LockRetry46 = 0 end END CATCH end end if @CountElementsChanged > 0 and @JournalProcedureExists = 1 begin select @JournalMessage = '#LDS#System elements modified by {0}, pattern {1}, elements affected {2}.|'47 + isnull(OBJECT_NAME(@@procid), '') + '|' + @tablepattern + '|' + dbo.QBM_FCVIntToString(@CountElementsChanged) + '|' if not exists (select top 1 1 from48 DialogDatabase where IsMainDatabase = 1 and UpdatePhase <> 0) and not exists (select top 1 1 from sys.tables t with (readpast) join sys.columns c with49 (readpast) on t.object_id = c.object_id where t.name = 'DialogDatabase' and c.name = 'InitialMigrationRunning' ) begin exec QBM_PJournal @JournalMessage50, @@procid, @MessageType, @DebugLevel, 20 end else begin exec QBM_PJournal @JournalMessage, @@procid, 'I', 'I' end end END TRY BEGIN CATCH exec QBM_PSessionErrorAdd51 default END CATCH if @FehlerAufgetreten = 1 begin declare @Rethrow varchar(1000) = dbo.QBM_FGISessionErrorRethrow() RAISERROR (@Rethrow, 18, 1) WITH NOWAIT52 end end 53