sistemata storedprocedure
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit

This commit is contained in:
2025-01-17 16:07:27 +01:00
parent 64e3009805
commit 200f8c26e9

View File

@@ -0,0 +1,287 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250117153052 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateProcedure("[sp_moveTableToFileGroup]", "CREATE PROCEDURE [dbo].[sp_moveTableToFileGroup] (@tableName varchar(max), @fileGroup varchar(max), @fileName varchar(max), @createFile varchar(1) = 'N')\n" +
"AS\n" +
"BEGIN\n" +
" /*la variabile @fileGroup deve contenere solo il prefisso poi la procedura aggiunge _DATA e _INDEX*/\n" +
"\n" +
" declare @fileGroupIndex varchar(max), @fileGroupData varchar(max), @sqlText varchar(max),\n" +
" @countFile int, @pathDB varchar(max), @fileGroupDataName varchar(max),\n" +
" @fileGroupIndexName varchar(max)\n" +
"\n" +
" SELECT @pathDB = reverse(substring(reverse(physical_name), charindex('', reverse(physical_name)), LEN(physical_name) -charindex('', reverse(physical_name) ) + 1)) \n" +
" FROM sys.master_files inner join sys.databases on sys.master_files.database_id = sys.databases.database_id WHERE sys.databases.name = DB_NAME()and data_space_id = 1\n" +
"\n" +
" select @fileGroup = case when IsNull(@fileGroup, '') <> '' and RIGHT(@fileGroup, 5) = '_DATA' THEN LEFT(@fileGroup, LEN(@fileGroup) - 5 ) ELSE @fileGroup END\n" +
" \n" +
" SELECT @fileGroupData = CASE WHEN @fileGroup = 'PRIMARY' OR IsNull(@fileGroup, '') = '' THEN '' ELSE @fileGroup + '_DATA' END,\n" +
" @fileGroupIndex = CASE WHEN @fileGroup = 'PRIMARY' OR IsNull(@fileGroup, '') = '' THEN '' ELSE @fileGroup + '_INDEX ' END\n" +
"\n" +
" if @fileGroup <> 'PRIMARY' \n" +
" BEGIN\n" +
" select @countFile = COUNT(*) from sys.filegroups f WHERE name like @fileGroup + '%'\n" +
" \n" +
" IF @countFile = 0 AND @createFile = 'S'\n" +
" BEGIN\n" +
" select @fileGroupDataName = Lower(db_name()) + '_' + \n" +
" (SELECT UPPER(LEFT(value_string,1)) + LOWER(SUBSTRING(value_string,2,LEN(value_string))) \n" +
" FROM dbo.ParseStringIntoArray(@fileGroupData, '_') FOR XML PATH('') ),\n" +
" @fileGroupIndexName = Lower(db_name()) + '_' + \n" +
" (SELECT UPPER(LEFT(value_string,1)) + LOWER(SUBSTRING(value_string,2,LEN(value_string))) \n" +
" FROM dbo.ParseStringIntoArray(@fileGroupIndex, '_') FOR XML PATH('') )\n" +
"\n" +
" \n" +
" SELECT @sqlText =\n" +
" 'ALTER DATABASE ' + Upper(db_name()) + ' ADD FILEGROUP ' + @fileGroupData + '; '+ CHAR(13) + CHAR(10) + ' GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER DATABASE ' + Upper(db_name()) + ' ADD FILE (NAME = ' + @fileGroupDataName + ',' +\n" +
" 'FILENAME = ''' + @pathDB + @fileGroupDataName + '.ndf'' ' +\n" +
" ') TO FILEGROUP ' + @fileGroupData + ';'+ CHAR(13) + CHAR(10) + ' GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER DATABASE ' + Upper(db_name()) + ' ADD FILEGROUP ' + @fileGroupIndex + '; '+ CHAR(13) + CHAR(10) + ' GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER DATABASE ' + Upper(db_name()) + ' ADD FILE (NAME = ' +@fileGroupIndexName + ',' + \n" +
" 'FILENAME = ''' + @pathDB + @fileGroupIndexName + '.ndf'' ' +\n" +
" ') TO FILEGROUP ' + @fileGroupIndex + ';' + CHAR(13) + CHAR(10) + ' GO' + CHAR(13) + CHAR(10) ;\n" +
"\n" +
"\n" +
" if @fileName <> '' \n" +
" exec sp_writeFile @fileName, @sqlText, 'S' \n" +
" else \n" +
" select @sqlText\n" +
" \n" +
" END\n" +
"\n" +
" SELECT @fileGroupData = ' ON ' + @fileGroupData, \n" +
" @fileGroupIndex = ' ON ' + @fileGroupIndex\n" +
"\n" +
" END\n" +
" \n" +
" \n" +
" DECLARE crs_query CURSOR FOR\n" +
" SELECT 'DROP INDEX '+ schema_name(t.schema_id) + '.' + t.name + '.' +i.name + CHAR(13) + CHAR(10) + ' GO' as script\n" +
" FROM sys.indexes i\n" +
" INNER JOIN sys.tables t ON t.object_id= i.object_id\n" +
" WHERE i.type>0 and \n" +
" t.is_ms_shipped=0 and \n" +
" t.name<>'sysdiagrams' and \n" +
" (is_primary_key=0 and is_unique_constraint=0) and\n" +
" t.name = @tableName\n" +
" union all\n" +
" SELECT 'CREATE ' +\n" +
" CASE \n" +
" WHEN I.is_unique = 1 THEN ' UNIQUE '\n" +
" ELSE ''\n" +
" END +\n" +
" I.type_desc COLLATE DATABASE_DEFAULT + ' INDEX ' +\n" +
" I.name + ' ON ' +\n" +
" SCHEMA_NAME(T.schema_id) + '.' + T.name + ' ( ' +\n" +
" KeyColumns + ' ) ' +\n" +
" ISNULL(' INCLUDE (' + IncludedColumns + ' ) ', '') +\n" +
" ISNULL(' WHERE ' + I.filter_definition, '') + ' WITH ( ' +\n" +
" CASE \n" +
" WHEN I.is_padded = 1 THEN ' PAD_INDEX = ON '\n" +
" ELSE ' PAD_INDEX = OFF '\n" +
" END + ',' +\n" +
" 'FILLFACTOR = ' + CONVERT(\n" +
" CHAR(5),\n" +
" CASE \n" +
" WHEN I.fill_factor = 0 THEN 100\n" +
" ELSE I.fill_factor\n" +
" END\n" +
" ) + ',' +\n" +
" -- default value \n" +
" 'SORT_IN_TEMPDB = OFF ' + ',' +\n" +
" CASE \n" +
" WHEN I.ignore_dup_key = 1 THEN ' IGNORE_DUP_KEY = ON '\n" +
" ELSE ' IGNORE_DUP_KEY = OFF '\n" +
" END + ',' +\n" +
" CASE \n" +
" WHEN ST.no_recompute = 0 THEN ' STATISTICS_NORECOMPUTE = OFF '\n" +
" ELSE ' STATISTICS_NORECOMPUTE = ON '\n" +
" END + ',' +\n" +
" ' ONLINE = OFF ' + ',' +\n" +
" CASE \n" +
" WHEN I.allow_row_locks = 1 THEN ' ALLOW_ROW_LOCKS = ON '\n" +
" ELSE ' ALLOW_ROW_LOCKS = OFF '\n" +
" END + ',' +\n" +
" CASE \n" +
" WHEN I.allow_page_locks = 1 THEN ' ALLOW_PAGE_LOCKS = ON '\n" +
" ELSE ' ALLOW_PAGE_LOCKS = OFF '\n" +
" END + ' ) ' + @fileGroupIndex + CHAR(13) + CHAR(10) + ' GO' [CreateIndexScript]\n" +
" FROM sys.indexes I\n" +
" JOIN sys.tables T\n" +
" ON T.object_id = I.object_id\n" +
" JOIN sys.sysindexes SI\n" +
" ON I.object_id = SI.id\n" +
" AND I.index_id = SI.indid\n" +
" JOIN (\n" +
" SELECT *\n" +
" FROM (\n" +
" SELECT IC2.object_id,\n" +
" IC2.index_id,\n" +
" STUFF(\n" +
" (\n" +
" SELECT ' , ' + C.name + CASE \n" +
" WHEN MAX(CONVERT(INT, IC1.is_descending_key)) \n" +
" = 1 THEN \n" +
" ' DESC '\n" +
" ELSE \n" +
" ' ASC '\n" +
" END\n" +
" FROM sys.index_columns IC1\n" +
" JOIN sys.columns C\n" +
" ON C.object_id = IC1.object_id\n" +
" AND C.column_id = IC1.column_id\n" +
" AND IC1.is_included_column = \n" +
" 0\n" +
" WHERE IC1.object_id = IC2.object_id\n" +
" AND IC1.index_id = IC2.index_id\n" +
" GROUP BY\n" +
" IC1.object_id,\n" +
" C.name,\n" +
" index_id\n" +
" ORDER BY\n" +
" MAX(IC1.key_ordinal) \n" +
" FOR XML PATH('')\n" +
" ),\n" +
" 1,\n" +
" 2,\n" +
" ''\n" +
" ) KeyColumns\n" +
" FROM sys.index_columns IC2 \n" +
" --WHERE IC2.Object_id = object_id('Person.Address') --Comment for all tables\n" +
" GROUP BY\n" +
" IC2.object_id,\n" +
" IC2.index_id\n" +
" ) tmp3\n" +
" )tmp4\n" +
" ON I.object_id = tmp4.object_id\n" +
" AND I.Index_id = tmp4.index_id\n" +
" JOIN sys.stats ST\n" +
" ON ST.object_id = I.object_id\n" +
" AND ST.stats_id = I.index_id\n" +
" JOIN sys.data_spaces DS\n" +
" ON I.data_space_id = DS.data_space_id\n" +
" JOIN sys.filegroups FG\n" +
" ON I.data_space_id = FG.data_space_id\n" +
" LEFT JOIN (\n" +
" SELECT *\n" +
" FROM (\n" +
" SELECT IC2.object_id,\n" +
" IC2.index_id,\n" +
" STUFF(\n" +
" (\n" +
" SELECT ' , ' + C.name\n" +
" FROM sys.index_columns IC1\n" +
" JOIN sys.columns C\n" +
" ON C.object_id = IC1.object_id\n" +
" AND C.column_id = IC1.column_id\n" +
" AND IC1.is_included_column = \n" +
" 1\n" +
" WHERE IC1.object_id = IC2.object_id\n" +
" AND IC1.index_id = IC2.index_id\n" +
" GROUP BY\n" +
" IC1.object_id,\n" +
" C.name,\n" +
" index_id \n" +
" FOR XML PATH('')\n" +
" ),\n" +
" 1,\n" +
" 2,\n" +
" ''\n" +
" ) IncludedColumns\n" +
" FROM sys.index_columns IC2 \n" +
" --WHERE IC2.Object_id = object_id('Person.Address') --Comment for all tables\n" +
" GROUP BY\n" +
" IC2.object_id,\n" +
" IC2.index_id\n" +
" ) tmp1\n" +
" WHERE IncludedColumns IS NOT NULL\n" +
" ) tmp2\n" +
" ON tmp2.object_id = I.object_id\n" +
" AND tmp2.index_id = I.index_id\n" +
" WHERE I.is_primary_key = 0\n" +
" AND I.is_unique_constraint = 0 and\n" +
" t.name = @tableName\n" +
" --AND I.Object_id = object_id('Person.Address') --Comment for all tables\n" +
" --AND I.name = 'IX_Address_PostalCode' --comment for all indexes \n" +
" union all\n" +
" SELECT 'ALTER TABLE ' + schema_name(fk.schema_id) + '.' + object_name(fk.parent_object_id)+ ' DROP CONSTRAINT ' + name + CHAR(13) + CHAR(10) + ' GO'\n" +
" from sys.foreign_keys fk\n" +
" where (object_name(fk.referenced_object_id) = @tableName)\n" +
" union all\n" +
" SELECT 'EXEC dbo.DropPrimaryKey '''+@tableName+''''+ CHAR(13) + CHAR(10) + ' GO' \n" +
" FROM sysobjects sysobjects_a, \n" +
" sysobjects sysobjects_b\n" +
" WHERE ( sysobjects_a.parent_obj = sysobjects_b.id) and \n" +
" ( sysobjects_a.xtype = 'PK' ) and \n" +
" ( sysobjects_b.name = @tableName )\n" +
" union all\n" +
" SELECT 'ALTER TABLE ' + schema_name(tb.schema_id) + '.' + tb. name + ' ADD CONSTRAINT pk_' + tb.name + ' primary key (' + \n" +
" ( select STUFF(( select ',' + col.name\n" +
" from sys.indexes ix \n" +
" inner join sys.index_columns ixc on ix.object_id=ixc.object_id and ix.index_id= ixc.index_id\n" +
" inner join sys.columns col on ixc.object_id =col.object_id and ixc.column_id=col.column_id\n" +
" where ix.type>0 and (ix.is_primary_key=1 or ix.is_unique_constraint=1)\n" +
" and object_name(ix.object_id) = tb.name\n" +
" ORDER BY ixc.key_ordinal\n" +
" FOR XML PATH('')), 1, 1, '' ) ) + ') ' + @fileGroupData + CHAR(13) + CHAR(10) + ' GO'\n" +
" from sys.tables tb\n" +
" where tb.name = @tableName and\n" +
" object_id in ( select object_id from sys.indexes ix where ix.is_primary_key=1 ) \n" +
" union all\n" +
" SELECT 'ALTER TABLE ' + schema_name(fk.schema_id) + '.' + object_name(fk.parent_object_id) + \n" +
" ' ADD CONSTRAINT ' + FK.NAME + ' FOREIGN KEY (' + \n" +
" (SELECT STUFF(( select ',' + c1.NAME \n" +
" from sys.foreign_key_columns fkc \n" +
" inner join sys.columns c1 on c1.object_id=fkc.parent_object_id and c1.column_id=fkc.parent_column_id \n" +
" where fkc.constraint_object_id = fk.OBJECT_ID \n" +
" ORDER by fkc.constraint_column_id\n" +
" FOR XML PATH('')), 1, 1, '' )) + \n" +
" ') REFERENCES ' + OBJECT_NAME(fk.referenced_object_id) + CHAR(13) + CHAR(10) + ' GO'\n" +
" from sys.foreign_keys fk\n" +
" where ( object_name(fk.referenced_object_id) = @tableName)\n" +
" union all\n" +
" select 'ALTER TABLE ' + + schema_name(tb.schema_id) + '.' + tb. name + ' ADD ID_PK_TEMP INT IDENTITY; ' + + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER TABLE ' + schema_name(tb.schema_id) + '.' + tb. name + ' ADD CONSTRAINT PK_' + tb. name + ' PRIMARY KEY(ID_PK_TEMP) ' + @fileGroupData + '; ' +\n" +
"CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER TABLE ' + schema_name(tb.schema_id) + '.' + tb. name + ' DROP CONSTRAINT PK_' + tb. name + ' ;' + CHAR(13) + CHAR(10) + 'GO'\n" +
" from sys.tables tb\n" +
" where object_id not in (\n" +
" select object_id\n" +
" from sys.indexes ix \n" +
" where ix.is_primary_key=1 ) and tb.name = @tableName\n" +
"\n" +
"\n" +
" OPEN crs_query \n" +
" FETCH NEXT FROM crs_query INTO @sqlText\n" +
" WHILE @@FETCH_STATUS = 0\n" +
" BEGIN\n" +
" if @fileName <> '' \n" +
" exec sp_writeFile @fileName, @sqlText, 'S' \n" +
" else \n" +
" select @sqlText\n" +
" \n" +
"\n" +
" FETCH NEXT FROM crs_query INTO @sqlText\n" +
" END\n" +
" CLOSE crs_query\n" +
" DEALLOCATE crs_query \n" +
"END");
}
@Override
public void down() throws Exception {
}
}