Ideando

agosto 4, 2007

Como ejecutar un comando msdos desde SQL

Filed under: programacion, sql, T-SQL — mrodriguez @ 5:52 pm

Existe un store procedure con el que se puede ejecutar una instrucción msdos desde sql. Se hace de esta forma:

exec master.dbo.xp_cmdshell ‘dir c:\ /b’

Esto nos entregará en forma de tabla el listado de la unidad c:\
De esta forma podríamos accesar archivos de un directorio y procesarlos de alguna forma en un store procedure:

set @query =’master.dbo.xp_cmdshell “dir c:\Directorio\ /b”‘
insert #x exec (@query)

Mas información útil en: http://www.insesys.com.mx

Anuncios

Como evitar el uso de cursores en Store procedures

Filed under: programacion, sql, T-SQL — mrodriguez @ 5:36 pm

Para evitar el uso de cursores se pueden crear tablas temporales con un campo identity.  Despues se puede usar esta tabla temporal para recorrerla en un ciclo usando el identity para identificar el registro que se requiere.   Un ejemplo de esto sería:

— Primero llenamos la tabla temporal  (#x) nuestra consulta principal
select identity(int,1,1) as ID, Campos into #x from Tabla

— Preparamos las variables que nos ayudarán con el barrido.
declare @maximo int
declare @cont int
declare @Campos char(10)
set @maximo = (select max(ID) from #x)
set @cont =0

— Seguimos con el ciclo que generará el barrido.
While @cont <= @maximo
begin
   set @cont=@cont+1
   set @Campos = (select Campos from #x where [id] = @cont)
   — Aquí se ponen las operaciones que sean necesarias.
end
— Listo!

enero 13, 2007

Creando eventos en el event viewer de windows desde un store procedure

Filed under: T-SQL — mrodriguez @ 6:34 am

El día de hoy investigando un poco acerca de como registrar algunos resultados desde un Store Procedure en Ms SQL Server, me encontré con la opción para enviar las notificaciones directamente al event viewer de windows, esto se me hizo muy interesante y quiero compartirlo

 El código para hacerlo es simple:

master..xp_logevent 50001, ‘Mensaje de error’, ERROR

master..xp_logevent 50001, ‘Mensaje informativo’, INFORMATIONAL

master..xp_logevent 50001, ‘Mensaje de advertencia’, WARNING

 Concentremonos en las líneas que inician con master…  en la primera línea estamos enviando un evento de error y el mensaje es el que está entre comillas.  El segundo es un mensaje informativo y esta determinado por el segundo por el tercer parámetro.   La tercera línea nos envía un warning con su correspondiente mensaje de advertencia.

 El primer parámetro es un número de error y lo que la página de microsoft nos dice al respecto, es que este valor puede ir desde 50000 hasta 1073741823, así que es casí ilimitado.

El segundo parámetro es el mensaje que se enviará al event viewer.

El tercer parámetro es opcional y puede tener cualquiera de los valores de los ejemplos anteriores, siendo el default el informativo.

Aquí está el ejemplo de lo que comento: 

Event viewer detalle

Blog de WordPress.com.