Bases de datos

SQL Server

Generación de UPDATES de valores tipo caracter a mayúsculas de toda la base de datos

Última actualización: 04-12-2022 11:06

Este script sirve para generar comandos de UPDATE sobre las columnas de todas las tablas de la base de datos que sean de tipo nvarchar/varchar.

Se tiene una bandera [@fExec] que si tiene valor 0 solo se mostrarán los comandos generados.

Si la bandera [@fExec] tiene valor 1 ENTONCES SE EJECUTARÁN TODOS LOS UPDATES.



 
declare @t table (ROWID int identity (1, 1), XSQL varchar(4000));
declare @fExec bit = 0;
 
	insert into @t (XSQL)
		select 'update [' + d.name + '].[' + a.name + '] set [' + b.name + '] = upper([' + b.name + ']);' as XSQL
		from sys.objects a 	
			inner join sys.columns b on b.object_id = a.object_id 
			inner join sys.types c on c.system_type_id = b.system_type_id and not c.name in ('sysname')
			inner join sys.schemas d on d.schema_id = a.schema_id
		where a.type = 'u'
			and not a.name in ('sysdiagrams', '__EFMigrationsHistory')
			and not a.name like '%filtro para no tomar en cuenta otras tablas%'	
			and not a.name like '%filtro para no tomar en cuenta otras tablas%'	
			and c.name in ('nvarchar', 'varchar')
		order by d.name, a.name, b.name, c.name;
 
	if (@fExec = 0) select * from @t;
	else 
	begin
		declare @n int, @i int, @XSQL varchar(4000);
		set @n = (select count(*) from @t);
		set @i = 1;
		while (@i <= @n)
		begin
			set @XSQL = (select XSQL from @t where ROWID = @i);
			exec (@XSQL);
			set @i += 1;
		end;
	end;
go