This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,220 @@
-- Intézmény adatokat eltávolító szkript, ha csak pár intézmény kell az adatbázisba
declare @INTEZMENYEK varchar(max) = 'klik034885002'; -- <----- Megmaradó intézmény azonosítók
declare @SQL nvarchar(max);
-- EZUTÁN KÖVETKEZŐ SOROKHOZ NE NYÚLJ! -----------------------------------------------------------------------
-- ellenőrzés
select @SQL = 'Érvénytelen intézmény azonosító: ' + a.value
from string_split(@INTEZMENYEK, ',') a
where not exists(select * from T_INTEZMENY where C_AZONOSITO = a.value);
if @SQL > '' throw 50001, @SQL, 1;
set @INTEZMENYEK = stuff((
select concat(',', i.ID)
from string_split(@INTEZMENYEK, ',') a
inner join T_INTEZMENY i on i.C_AZONOSITO = a.value
for xml path('')
), 1, 1, '');
if isnull(ltrim(rtrim(@INTEZMENYEK)), '') = '' throw 50001, N'Nem található intézmény ID', 1;
print concat('Intézmény ID-k: ', @INTEZMENYEK);
-- simple recovery bekapcsolása
set @SQL = 'ALTER DATABASE ' + db_name() + ' SET RECOVERY SIMPLE';
if exists(select * from sys.databases where database_id = db_id() and recovery_model_desc <> 'SIMPLE') exec(@SQL);
-- triggerek letiltása ------------------------------------------------------------------------------------------------
set @SQL = '';
select @SQL += 'DISABLE TRIGGER ' + tr.name + ' ON ' + s.name + '.' + t.name + ';' + char(13)
from sys.triggers tr
inner join sys.tables t on t.object_id = tr.parent_id
inner join sys.schemas s on s.schema_id = t.schema_id
where tr.is_disabled = 0;
exec(@SQL);
-- foreign key-ek letiltása -------------------------------------------------------------------------------------------
set @SQL = '';
select @SQL += 'ALTER TABLE ' + s.name + '.' + t.name + ' NOCHECK CONSTRAINT ' + fk.name + ';' + char(13)
from sys.foreign_keys fk
inner join sys.tables t on t.object_id = fk.parent_object_id
inner join sys.schemas s on s.schema_id = t.schema_id
where fk.is_not_trusted = 0 or is_disabled = 0;
exec(@SQL);
-- nonclustered indexek törlése (opcionális) --------------------------------------------------------------------------
set @SQL = '';
select @SQL += 'DROP INDEX ' + i.name + ' ON [' + s.name + '].[' + t.name + '];' + char(13)
from sys.indexes i
inner join sys.tables t on t.object_id = i.object_id
inner join sys.schemas s on s.schema_id = t.schema_id
where i.type_desc = 'NONCLUSTERED'
and not exists(select * from sys.key_constraints pk where pk.type in ('PK', 'UQ') and pk.unique_index_id = i.index_id)
and i.is_unique = 0;
exec(@SQL);
-- intézmény adatok törlése -------------------------------------------------------------------------------------------
set xact_abort on;
set nocount on;
declare @object_id int = 0;
declare @DROP nvarchar(max), @INTO nvarchar(max), @TRUNCATE nvarchar(max), @INSERT nvarchar(max), @ADD nvarchar(max);
while (1 = 1)
begin
select top 1
@object_id = t.object_id,
@DROP = '',
@INTO = '',
@TRUNCATE = '',
@INSERT = '',
@ADD = ''
from sys.tables t
inner join sys.schemas s on s.schema_id = t.schema_id
inner join sys.columns c on c.object_id = t.object_id
where 1 = 1
and t.object_id > @object_id
and c.name in ('C_INTEZMENYID', 'C_ALINTEZMENYID')
and s.name not in ('auditlog', 'core', 'dev', 'HangFire')
and t.name not in ('XmlAudit')
order by t.object_id;
if @@rowcount = 0 break;
select
@DROP += 'ALTER TABLE ' + p.parent_object_name + ' DROP CONSTRAINT ' + fk.name + ';' + char(13),
@INTO = 'SELECT * INTO ' + t_columns.current_object_name + '_temp FROM ' + t_columns.current_object_name + ' WHERE ' + c.name + ' IN (' + @INTEZMENYEK + ');' + char(13),
@TRUNCATE = 'TRUNCATE TABLE ' + t_columns.current_object_name + ';' + char(13),
@INSERT = case when t_columns.has_identity = 1 then 'SET IDENTITY_INSERT ' + t_columns.current_object_name + ' ON;' + char(13) else '' end +
'INSERT INTO ' + t_columns.current_object_name + '(' + t_columns.column_list + ') ' +
'SELECT ' + t_columns.column_list + ' FROM ' + t_columns.current_object_name + '_temp;' + char(13) +
'DROP TABLE ' + t_columns.current_object_name + '_temp;' + char(13) +
case when t_columns.has_identity = 1 then 'SET IDENTITY_INSERT ' + t_columns.current_object_name + ' OFF;' + char(13) else '' end,
@ADD += 'ALTER TABLE ' + p.parent_object_name + ' WITH NOCHECK ADD CONSTRAINT ' + fk.name + ' ' +
'FOREIGN KEY (' + p_columns.column_list + ') REFERENCES ' + r.referenced_object_name + '(' + r_columns.column_list + ');' + char(13) +
'ALTER TABLE ' + p.parent_object_name + ' NOCHECK CONSTRAINT ' + fk.name + ';' + char(13)
from sys.tables t
inner join sys.schemas s on s.schema_id = t.schema_id
inner join sys.columns c on c.object_id = t.object_id
left join (
sys.foreign_keys fk
inner join sys.tables pt on pt.object_id = fk.parent_object_id
inner join sys.schemas ps on ps.schema_id = pt.schema_id
inner join sys.tables rt on rt.object_id = fk.referenced_object_id
inner join sys.schemas rs on rs.schema_id = rt.schema_id
) on fk.referenced_object_id = t.object_id
outer apply (select ps.name + '.' + pt.name as parent_object_name) p
outer apply (select rs.name + '.' + rt.name as referenced_object_name) r
outer apply (
select stuff((
select ',' + c.name
from sys.columns c
where c.object_id = t.object_id
and c.is_computed = 0
order by c.column_id
for xml path('')
), 1, 1, '') as column_list,
case when exists(select * from sys.columns c where c.object_id = t.object_id and c.is_identity = 1) then 1 else 0 end as has_identity,
s.name + '.' + t.name as current_object_name
) t_columns
outer apply (
select stuff((
select ',' + c.name
from sys.columns c
inner join sys.foreign_key_columns fkc on fkc.parent_column_id = c.column_id and fkc.parent_object_id = c.object_id
where fkc.constraint_object_id = fk.object_id
order by fkc.constraint_column_id
for xml path('')
), 1, 1, '') as column_list
) p_columns
outer apply (
select stuff((
select ',' + c.name
from sys.columns c
inner join sys.foreign_key_columns fkc on fkc.referenced_column_id = c.column_id and fkc.referenced_object_id = c.object_id
where fkc.constraint_object_id = fk.object_id
order by fkc.constraint_column_id
for xml path('')
), 1, 1, '') as column_list
) r_columns
where t.object_id = @object_id
and c.name in ('C_INTEZMENYID', 'C_ALINTEZMENYID');
set @SQL = CONCAT(
'BEGIN TRANSACTION;' + char(13),
@DROP,
@INTO,
@TRUNCATE,
@INSERT,
@ADD,
'COMMIT TRANSACTION;' + char(13),
'CHECKPOINT;'
);
begin try
exec(@SQL);
end try
begin catch
print @SQL;
throw;
end catch
end
-- speciális táblák
-- T_ENTITYATTRIBUTEHISTORY
ALTER TABLE dbo.T_ENTITYBLOBVALUES DROP CONSTRAINT IF EXISTS FK_EntityBLOBValues;
BEGIN TRANSACTION;
SELECT *
INTO dbo.T_ENTITYATTRIBUTEHISTORY_temp
FROM dbo.T_ENTITYATTRIBUTEHISTORY eah
WHERE EXISTS(SELECT * FROM dbo.T_ENTITYHISTORY eh WHERE eh.ID = eah.C_ENTITYHISTORYID);
TRUNCATE TABLE dbo.T_ENTITYATTRIBUTEHISTORY;
SET IDENTITY_INSERT dbo.T_ENTITYATTRIBUTEHISTORY ON;
INSERT INTO dbo.T_ENTITYATTRIBUTEHISTORY(ID, C_CURRENTVALUE, C_ORIGINALVALUE, C_PROPERTYNAME, C_ENTITYHISTORYID)
SELECT ID, C_CURRENTVALUE, C_ORIGINALVALUE, C_PROPERTYNAME, C_ENTITYHISTORYID FROM dbo.T_ENTITYATTRIBUTEHISTORY_temp
SET IDENTITY_INSERT dbo.T_ENTITYATTRIBUTEHISTORY OFF;
DROP TABLE dbo.T_ENTITYATTRIBUTEHISTORY_temp;
COMMIT TRANSACTION;
-- foreign key-ek visszakapcsolása (opcionális) -----------------------------------------------------------------------
set @SQL = '';
select @SQL += 'ALTER TABLE ' + s.name + '.' + t.name + ' CHECK CONSTRAINT ' + fk.name + ';' + char(13)
from sys.foreign_keys fk
inner join sys.tables t on t.object_id = fk.parent_object_id
inner join sys.schemas s on s.schema_id = t.schema_id
where fk.is_not_trusted = 1 or is_disabled = 1;
exec(@SQL);
go
-- shrinkelés ---------------------------------------------------------------------------------------------------------
DBCC SHRINKDATABASE(0);
CHECKPOINT;
DBCC SHRINKDATABASE(0);