Como contar palabras en una cadena de SQL Server

Todos sabemos el poder de SQL Server. Pero, también sabemos que le faltan muchas funciones a SQL Server que aparecen in Excel, Word, y hasta Notepad++. En Excel, Word, y Notepad++, cuando buscamos una palabra, los programas encuentran todas las ocurrencias de las palabras y también cuenta todas las ocurrencias. Pero en SQL Server, cuando buscamos una palabra un una cadena de VARCHAR, NVARCHAR, etc, SQL Server nos da el campo entero. Además, una palabra puede aparecer varias veces en un campo. SQL Server si cuenta las filas regresadas, pero no cuenta las palabras entre el campo.
En este ejemplo, necesito cambiar el RAISERROR 50000 del estilo 2005 al sintaxis RAISERROR(‘’,16,1) de 2008 y adelante. En negocio pido el número de cambios por objeto. Encontré 90% del query en SQL Mag: SQL Server Pro: Counting Instances of a Word in a Record
Pero necesitaba más información, como el tipo de objeto y el nombre del objeto.

SELECT  object_name(sm.OBJECT_ID) as NAME
	   , so.[TYPE]
	   , SUM((LEN(sm.[definition] ) - LEN(REPLACE(sm.[definition] , 'RAISERROR 50000', '')))/LEN('RAISERROR 50000')) as FOUND
FROM    sys.sql_modules as sm
	   inner join sys.objects as so
		  on sm.OBJECT_ID = so.OBJECT_ID
where   sm.[definition] like '%RAISERROR 50000%'
group by sm.OBJECT_ID, so.[type]
order by object_name(sm.OBJECT_ID)

Los resultados parecen así:

NAME TYPE FOUND
Trigger_One TR 1
Proc_001 P 3
Proc_002 P 22
Proc_003 P 16

Que nos da cuantas veces aparece el RAISERROR con la sintaxis de SQL Server 2000.


Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *