Buscar

Mostrando entradas con la etiqueta Sql. Mostrar todas las entradas
Mostrando entradas con la etiqueta Sql. Mostrar todas las entradas

viernes, 10 de junio de 2011

Buscar texto en un Store Procedure (SP) de SQL

Este script lo realicé para buscar un texto dentro de la definición de un store procedure (sp) y nos lista los nombres de los Sp que contienen esa palabra

hay que cambiar el texto a buscar en la parte

set @PalabraABuscar = 'Texto a buscar'

Espero lo disfruten :)

------Comienza código --------

SET NOCOUNT ON
DECLARE @PalabraABuscar nvarchar(500)
DECLARE @Encontrado int
DECLARE @Nombre nvarchar(100)
DECLARE @Id int

CREATE TABLE #Tmp_Encontrados(
Nombre nvarchar(500) NULL,
pos int null)

set @PalabraABuscar = 'Texto a buscar'


DECLARE Cursor_Objeto CURSOR FOR
SELECT object_id,name FROM sys.objects WHERE type in (N'P', N'PC')

OPEN Cursor_Objeto;

FETCH NEXT FROM Cursor_Objeto
INTO @Id, @Nombre;

WHILE @@FETCH_STATUS = 0
BEGIN
set @Encontrado=0

SELECT @Encontrado= charindex(@PalabraABuscar,smsp.definition)
FROM
sys.all_objects AS sp
LEFT OUTER JOIN sys.database_principals AS ssp ON ssp.principal_id = ISNULL(sp.principal_id, (OBJECTPROPERTY(sp.object_id, 'OwnerId')))
LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id
LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id
LEFT OUTER JOIN sys.assembly_modules AS amsp ON amsp.object_id = sp.object_id
LEFT OUTER JOIN sys.assemblies AS asmblsp ON asmblsp.assembly_id = amsp.assembly_id
LEFT OUTER JOIN sys.procedures AS spp ON spp.object_id = sp.object_id
WHERE sp.name=@Nombre

IF @Encontrado > 0
BEGIN
INSERT INTO #Tmp_Encontrados VALUES(@Nombre,@Encontrado)
END

FETCH NEXT FROM Cursor_Objeto
INTO @Id, @Nombre;
END
CLOSE Cursor_Objeto;
DEALLOCATE Cursor_Objeto;


SET NOCOUNT OFF
SELECT * FROM #Tmp_Encontrados
DROP TABLE #Tmp_Encontrados

----Termina Código -------

lunes, 8 de junio de 2009

Saber que usuario ingresa, borra o actualiza registros en sql (Auditoria en Sql SUSER_SNAME())

Muchas veces necesitamos saber el nombre de inicio de sesión de la persona que esta ejecutando una consulta de insert, update o delete en SQL, ya sea para hacer auditorias o para validar accesos a nuestras aplicaciones para obtener este inicio de sesión simplemente utilizamos el comando SUSER_SNAME(), un ejemplo de su uso es cuando queremos hacer tablas de auditoria, ósea saber quien ingresa, borra, o actualiza registros en una tabla especifica.
Yo lo hago con un trigger de la siguiente manera:

CREATE TRIGGER [NombreTrigger]
ON Tabla
after insert
AS
Insert Into TablaAuditoria(Campo1,Campo2,Campo3,Usuario,Fecha)
Select Campo1,Campo2,Campo3, SUSER_SNAME(),getdate()
From Tabla

Con este trigger logro tener un registro de quien ingreso un registro a mi tabla y a que horas
Espero les sea útil

miércoles, 22 de abril de 2009

Guardar fecha sin hora SQL

Muchas veces necesitamos guardar la fecha sin hora en una base de sql, el problema surge cuando utilizamos la función
 GETDATE () 
que nos devuelve la fecha y la hora o cuando nuestra aplicación envía la fecha con la hora, una forma de corregir esto es utilizar la función
 CONVERT 
de esta forma

set dateformat dmy;
select CONVERT (datetime,CONVERT(VARCHAR,GETDATE(),101),101)

Esto lo que hace es convertir la fecha a un texto con un formato sin hora y después vuelvo y lo convierto a un dato de tipo fecha por si necesito realizar operaciones con este dato.

lunes, 20 de abril de 2009

Redondeo por múltiplos(Excel, Sql)

En Excel existe una función para redondear por múltiplos, la función es MROUND(N;m), donde redondea n a el múltiplo de m mas cercano. Eso si tenemos el Análisis Toolpack., si no se puede utilizar la siguiente función
REDONDEAR(N/m;0)*m.
Ejemplo :
MROUND(5,3)
Resultado:
6

Esto es una función que hace lo mismo pero en SQL:
Uso:

select dbo.RoundMult(5,3)


CREATE FUNCTION [dbo].[RoundMult] (@Valor numeric(18,2),@Multiplo Numeric(18,2))
RETURNS nvarchar(50)
WITH EXECUTE AS CALLER
AS
BEGIN

declare @Residuo numeric(18,0)
DECLARE @ValASumar numeric(18,0)

set @Residuo=@Valor%@Multiplo

IF @Residuo=0
BEGIN
return @Valor
END
ELSE
set @ValASumar= @Multiplo-@Residuo
return @Valor+@ValASumar
END

Formatear texto SQL (Poner letra inicial en mayuscula)

Esta función sql muestra como poner la primera letra de cada palabra en mayúscula de un registro de nuestra base de datos, es muy útil, cuando los usuarios, ingresan los datos de manera desorganizada.

Uso:
Select [dbo].InitCap('TEXTO A FORMATEAR')
Resultado:
Texto A Formatear


CREATE FUNCTION [dbo].[InitCap] ( @InputString nvarchar(255) )
RETURNS NVARCHAR(255)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1)
DECLARE @OutputString NVARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 1
WHILE @Index <= LEN(@InputString) BEGIN SET @Char = SUBSTRING(@InputString, @Index, 1) SET @PrevChar = CASE WHEN @Index = 1 THEN ' ' ELSE SUBSTRING(@InputString, @Index - 1, 1) END IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(') BEGIN IF @PrevChar != '''' OR UPPER(@Char) != 'S' SET @OutputString = STUFF(@OutputString, @Index, 1, UPPER(@Char)) END SET @Index = @Index + 1 END RETURN @OutputString END