Últimos mensajes - Powered by IBM
- Normalización
- Normalización
- Error -2147221503 [ODBC SQL Server ...
- Sql Server Backups
- sql server
- informe de consumo mensual
- rangos de fecha
- error con instancia en sql server 2005 express ...
- Conexion via Programacion a SQL SERVER 2008 R2
- Exportar datos desde un archivo de Texto a SQL ...
Palabras claves
Descomponer octetos de una IP en T-SQL
11/08/2006 - 17:12 por pablo.lapido | Informe spam
Comparto con ustedes esta lógica que sirve para descomponer un campo
que contenga una IP válida en todos sus octetos. Esto esta hecho
utilizando únicamente SQL transaccional.
/* DOCUMENTACION */
PRIMER PUNTO
A = PATINDEX('%.%', ip)
PRIMER OCTETO
B = SUBSTRING(ip, 1, A-1)
Desarrollado
SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)
SEGUNDO PUNTO
C = PATINDEX('%.%', SUBSTRING(ip, LEN(B) + 2, 20)) + A
Desarrollado
PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)
SEGUNDO OCTETO
D = SUBSTRING(ip, A + 1, C - A - 1)
Desarrollado
SUBSTRING(ip, PATINDEX('%.%', ip) + 1, (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) - (PATINDEX('%.%', ip)) - 1)
TERCER PUNTO
E = C + PATINDEX('%.%', SUBSTRING(ip, C + 1, 20))
Desarrollado
(PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))
TERCER OCTETO
F = SUBSTRING(ip, C + 1, E - C - 1)
Desarrollado
SUBSTRING(ip, (PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + 1,
((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))) -
(PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) - 1)
CUARTO OCTETO
G = SUBSTRING(ip, E + 1, LEN(RTRIM(LTRIM(ip))) - E)
Desarrollado
SUBSTRING(ip, ((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) +
(PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) + 1, LEN(RTRIM(LTRIM(ip))) -
((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))))
/* FIN DOCUMENTACION */
/* EJEMPLO */
/* En este ejemplo utilice esta logica para sincronizar una tabla donde
guardo informacion sobre Equipos que tienen IPs con un DNS, para lo
cual es necesario descomponer la IP en sus octetos */
CREATE TRIGGER T_I_Historico_U ON [dbo].[TEL_Equipos]
FOR UPDATE
AS
DECLARE
@NombreDNS VARCHAR(255),
@IP VARCHAR(15),
@TipoServicio INTEGER,
@IdEquipo INTEGER,
@GeneraDNS VARCHAR(1),
@NombreDNSAnt VARCHAR(255),
@IPAnt VARCHAR(15),
@TipoServicioAnt INTEGER,
@GeneraDNSAnt VARCHAR(1),
@Clave1 VARCHAR(255),
@Tabla VARCHAR(255),
@Campo VARCHAR(255),
@ValorAnt VARCHAR(255),
@Valor VARCHAR(255),
@Usuario VARCHAR(255),
@StringAux VARCHAR(255),
@DNSPTRBaja VARCHAR(255),
@DNSPTRAlta VARCHAR(255),
@DNSBaja VARCHAR(255),
@DNSAlta VARCHAR(255),
@IPANTPUNTO1 INTEGER,
@IPANTPUNTO2 INTEGER,
@IPANTPUNTO3 INTEGER,
@IPANTOCTETO1 VARCHAR(5),
@IPANTOCTETO2 VARCHAR(5),
@IPANTOCTETO3 VARCHAR(5),
@IPANTOCTETO4 VARCHAR(5),
@IPPUNTO1 INTEGER,
@IPPUNTO2 INTEGER,
@IPPUNTO3 INTEGER,
@IPOCTETO1 VARCHAR(5),
@IPOCTETO2 VARCHAR(5),
@IPOCTETO3 VARCHAR(5),
@IPOCTETO4 VARCHAR(5)
BEGIN
/* VALORES NUEVOS A GRABAR EN LA BD */
SELECT
@IdEquipo = IdEquipo,
@NombreDNS = RTRIM(LTRIM(NombreDNS)),
@IP = IP,
@TipoServicio = IdTipoServicio,
@GeneraDNS = GeneraDNS,
@Usuario = Usuario,
@IPPUNTO1 = PATINDEX('%.%', IP),
@IPPUNTO2 = PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip),
@IPPUNTO3 = (PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) +
(PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20))),
@IPOCTETO1 = SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1),
@IPOCTETO2 = SUBSTRING(ip, PATINDEX('%.%', ip) + 1, (PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) - (PATINDEX('%.%', ip)) - 1),
@IPOCTETO3 = SUBSTRING(ip, (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + 1, ((PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + (PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) - (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) - 1),
@IPOCTETO4 = SUBSTRING(ip, ((PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + (PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) + 1, LEN(RTRIM(LTRIM(ip))) -
((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))))
FROM inserted
/* FIN VALORES NUEVOS A GRABAR EN LA BD */
/* VALORES EN LA BD ANTES DE LA GRABACION DE LOS NUEVOS */
SELECT
@NombreDNSAnt = RTRIM(LTRIM(NombreDNS)),
@IPAnt = IP,
@TipoServicioAnt = IdTipoServicio,
@GeneraDNSAnt = GeneraDNSAnt,
@IPANTPUNTO1 = PATINDEX('%.%', IP),
@IPANTPUNTO2 = PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip),
@IPANTPUNTO3 = (PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) +
(PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20))),
@IPANTOCTETO1 = SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1),
@IPANTOCTETO2 = SUBSTRING(ip, PATINDEX('%.%', ip) + 1,
(PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) - (PATINDEX('%.%', ip)) - 1),
@IPANTOCTETO3 = SUBSTRING(ip, (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + 1, ((PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + (PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) - (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) - 1),
@IPANTOCTETO4 = SUBSTRING(ip, ((PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + (PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) + 1, LEN(RTRIM(LTRIM(ip))) -
((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))))
FROM deleted
/* FIN VALORES EN LA BD ANTES DE LA GRABACION DE LOS NUEVOS */
/* HISTORICO DE CAMBIOS */
SET @Tabla = 'TEL_Equipos'
IF @NombreDNSAnt <> @NombreDNS
BEGIN
SET @Campo = 'NombreDNS'
SET @ValorAnt = @NombreDNSAnt
SET @Valor = @NombreDNS
SET @Clave1 = STR(@IdEquipo)
INSERT [dbo].[TEL_HistoricoCambios] (FECHA, TABLA,
CAMPO, VALORANTERIOR, VALORACTUAL, USUARIO, CLAVE1) values (GETDATE(),
@Tabla, @Campo, @ValorAnt, @Valor, @Usuario, @Clave1)
END
IF @IPAnt <> @IP
BEGIN
SET @Campo = 'IP'
SET @ValorAnt = @IPAnt
SET @Valor = @IP
SET @Clave1 = STR(@IdEquipo)
INSERT [dbo].[TEL_HistoricoCambios] (FECHA, TABLA, CAMPO,
VALORANTERIOR, VALORACTUAL, USUARIO, CLAVE1) values (GETDATE(), @Tabla,
@Campo, @ValorAnt, @Valor, @Usuario, @Clave1)
END
IF @TipoServicioAnt <> @TipoServicio
BEGIN
SET @Campo = 'IdTipoServicio'
SET @ValorAnt = STR(@TipoServicioAnt)
SET @Valor = STR(@TipoServicio)
SET @Clave1 = STR(@IdEquipo)
INSERT [dbo].[TEL_HistoricoCambios] (FECHA, TABLA,
CAMPO, VALORANTERIOR, VALORACTUAL, USUARIO, CLAVE1) values (GETDATE(),
@Tabla, @Campo, @ValorAnt, @Valor, @Usuario, @Clave1)
END
/* FIN HISTORICO DE CAMBIOS */
/* SINCRONIZACION CON DNS */
/* SI ANTES NO ACTUALIZABA EL DNS Y AHORA SI ==> ALTA EN EL DNS */
IF (@GeneraDNSAnt = 'N') AND (@GeneraDNS = 'S')
BEGIN
SET @DNSAlta = 'dnscmd 192.168.2.1 /RecordAdd
telecom.ute.com.uy ' + @NombreDNS + ' A ' + @IP
SET @DNSPTRAlta = 'dnscmd 192.168.2.1 /RecordAdd ' + @IPOCTETO1
+ '.in-addr.arpa ' + @IPOCTETO4 + '.' + @IPOCTETO3 + '.' + @IPOCTETO2 +
' PTR ' + @NombreDNS + '.'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSAlta + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSPTRAlta + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
END
/* SI ANTES ACTUALIZABA EL DNS Y AHORA NO ==> BAJA EN EL DNS */
IF (@GeneraDNSAnt = 'S') AND (@GeneraDNS = 'N')
BEGIN
SET @DNSPTRBaja = 'dnscmd 192.168.2.1 /RecordDelete ' +
@IPANTOCTETO1 + '.in-addr.arpa ' + @IPANTOCTETO4 + '.' + @IPANTOCTETO3
+ '.' + @IPANTOCTETO2 + ' PTR ' + @NombreDNSAnt + '. /f '
SET @DNSBaja = 'dnscmd 192.168.2.1 /RecordDelete
telecom.ute.com.uy ' + @NombreDNSAnt + ' A /f '
SET @StringAux = 'echo ' + @DNSPTRBaja + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSBaja + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
END
/* SI ANTES ACTUALIZABA EL DNS Y AHORA SIGUE ACTUALIZANDO ==> ME FIJO
SI CAMBIO EL NOMBRE O LA IP */
IF ((@GeneraDNSAnt = 'S') AND (@GeneraDNS = 'S')) AND ((@NombreDNSAnt
<> @NombreDNS) OR (@IPAnt <> @IP))
BEGIN
SET @DNSPTRBaja = 'dnscmd 192.168.2.1 /RecordDelete ' +
@IPANTOCTETO1 + '.in-addr.arpa ' + @IPANTOCTETO4 + '.' + @IPANTOCTETO3
+ '.' + @IPANTOCTETO2 + ' PTR ' + @NombreDNSAnt + '. /f '
SET @DNSBaja = 'dnscmd 192.168.2.1 /RecordDelete
telecom.ute.com.uy ' + @NombreDNSAnt + ' A /f '
SET @DNSAlta = 'dnscmd 192.168.2.1 /RecordAdd
telecom.ute.com.uy ' + @NombreDNS + ' A ' + @IP
SET @DNSPTRAlta = 'dnscmd 192.168.2.1 /RecordAdd ' + @IPOCTETO1
+ '.in-addr.arpa ' + @IPOCTETO4 + '.' + @IPOCTETO3 + '.' + @IPOCTETO2 +
' PTR ' + @NombreDNS + '.'
SET @StringAux = 'echo ' + @DNSPTRBaja + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSBaja + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSAlta + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSPTRAlta + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
END
/* FIN SINCRONIZACION CON DNS */
END
/* FIN EJEMPLO */
que contenga una IP válida en todos sus octetos. Esto esta hecho
utilizando únicamente SQL transaccional.
/* DOCUMENTACION */
PRIMER PUNTO
A = PATINDEX('%.%', ip)
PRIMER OCTETO
B = SUBSTRING(ip, 1, A-1)
Desarrollado
SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)
SEGUNDO PUNTO
C = PATINDEX('%.%', SUBSTRING(ip, LEN(B) + 2, 20)) + A
Desarrollado
PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)
SEGUNDO OCTETO
D = SUBSTRING(ip, A + 1, C - A - 1)
Desarrollado
SUBSTRING(ip, PATINDEX('%.%', ip) + 1, (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) - (PATINDEX('%.%', ip)) - 1)
TERCER PUNTO
E = C + PATINDEX('%.%', SUBSTRING(ip, C + 1, 20))
Desarrollado
(PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))
TERCER OCTETO
F = SUBSTRING(ip, C + 1, E - C - 1)
Desarrollado
SUBSTRING(ip, (PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + 1,
((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))) -
(PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) - 1)
CUARTO OCTETO
G = SUBSTRING(ip, E + 1, LEN(RTRIM(LTRIM(ip))) - E)
Desarrollado
SUBSTRING(ip, ((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) +
(PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) + 1, LEN(RTRIM(LTRIM(ip))) -
((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))))
/* FIN DOCUMENTACION */
/* EJEMPLO */
/* En este ejemplo utilice esta logica para sincronizar una tabla donde
guardo informacion sobre Equipos que tienen IPs con un DNS, para lo
cual es necesario descomponer la IP en sus octetos */
CREATE TRIGGER T_I_Historico_U ON [dbo].[TEL_Equipos]
FOR UPDATE
AS
DECLARE
@NombreDNS VARCHAR(255),
@IP VARCHAR(15),
@TipoServicio INTEGER,
@IdEquipo INTEGER,
@GeneraDNS VARCHAR(1),
@NombreDNSAnt VARCHAR(255),
@IPAnt VARCHAR(15),
@TipoServicioAnt INTEGER,
@GeneraDNSAnt VARCHAR(1),
@Clave1 VARCHAR(255),
@Tabla VARCHAR(255),
@Campo VARCHAR(255),
@ValorAnt VARCHAR(255),
@Valor VARCHAR(255),
@Usuario VARCHAR(255),
@StringAux VARCHAR(255),
@DNSPTRBaja VARCHAR(255),
@DNSPTRAlta VARCHAR(255),
@DNSBaja VARCHAR(255),
@DNSAlta VARCHAR(255),
@IPANTPUNTO1 INTEGER,
@IPANTPUNTO2 INTEGER,
@IPANTPUNTO3 INTEGER,
@IPANTOCTETO1 VARCHAR(5),
@IPANTOCTETO2 VARCHAR(5),
@IPANTOCTETO3 VARCHAR(5),
@IPANTOCTETO4 VARCHAR(5),
@IPPUNTO1 INTEGER,
@IPPUNTO2 INTEGER,
@IPPUNTO3 INTEGER,
@IPOCTETO1 VARCHAR(5),
@IPOCTETO2 VARCHAR(5),
@IPOCTETO3 VARCHAR(5),
@IPOCTETO4 VARCHAR(5)
BEGIN
/* VALORES NUEVOS A GRABAR EN LA BD */
SELECT
@IdEquipo = IdEquipo,
@NombreDNS = RTRIM(LTRIM(NombreDNS)),
@IP = IP,
@TipoServicio = IdTipoServicio,
@GeneraDNS = GeneraDNS,
@Usuario = Usuario,
@IPPUNTO1 = PATINDEX('%.%', IP),
@IPPUNTO2 = PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip),
@IPPUNTO3 = (PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) +
(PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20))),
@IPOCTETO1 = SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1),
@IPOCTETO2 = SUBSTRING(ip, PATINDEX('%.%', ip) + 1, (PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) - (PATINDEX('%.%', ip)) - 1),
@IPOCTETO3 = SUBSTRING(ip, (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + 1, ((PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + (PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) - (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) - 1),
@IPOCTETO4 = SUBSTRING(ip, ((PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + (PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) + 1, LEN(RTRIM(LTRIM(ip))) -
((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))))
FROM inserted
/* FIN VALORES NUEVOS A GRABAR EN LA BD */
/* VALORES EN LA BD ANTES DE LA GRABACION DE LOS NUEVOS */
SELECT
@NombreDNSAnt = RTRIM(LTRIM(NombreDNS)),
@IPAnt = IP,
@TipoServicioAnt = IdTipoServicio,
@GeneraDNSAnt = GeneraDNSAnt,
@IPANTPUNTO1 = PATINDEX('%.%', IP),
@IPANTPUNTO2 = PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip),
@IPANTPUNTO3 = (PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) +
(PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20))),
@IPANTOCTETO1 = SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1),
@IPANTOCTETO2 = SUBSTRING(ip, PATINDEX('%.%', ip) + 1,
(PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) - (PATINDEX('%.%', ip)) - 1),
@IPANTOCTETO3 = SUBSTRING(ip, (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + 1, ((PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + (PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) - (PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) - 1),
@IPANTOCTETO4 = SUBSTRING(ip, ((PATINDEX('%.%', SUBSTRING(ip,
LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip)) + (PATINDEX('%.%', SUBSTRING(ip, PATINDEX('%.%',
SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%', ip)-1)) + 2, 20)) +
PATINDEX('%.%', ip) + 1, 20)))) + 1, LEN(RTRIM(LTRIM(ip))) -
((PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1, PATINDEX('%.%',
ip)-1)) + 2, 20)) + PATINDEX('%.%', ip)) + (PATINDEX('%.%',
SUBSTRING(ip, PATINDEX('%.%', SUBSTRING(ip, LEN(SUBSTRING(ip, 1,
PATINDEX('%.%', ip)-1)) + 2, 20)) + PATINDEX('%.%', ip) + 1, 20)))))
FROM deleted
/* FIN VALORES EN LA BD ANTES DE LA GRABACION DE LOS NUEVOS */
/* HISTORICO DE CAMBIOS */
SET @Tabla = 'TEL_Equipos'
IF @NombreDNSAnt <> @NombreDNS
BEGIN
SET @Campo = 'NombreDNS'
SET @ValorAnt = @NombreDNSAnt
SET @Valor = @NombreDNS
SET @Clave1 = STR(@IdEquipo)
INSERT [dbo].[TEL_HistoricoCambios] (FECHA, TABLA,
CAMPO, VALORANTERIOR, VALORACTUAL, USUARIO, CLAVE1) values (GETDATE(),
@Tabla, @Campo, @ValorAnt, @Valor, @Usuario, @Clave1)
END
IF @IPAnt <> @IP
BEGIN
SET @Campo = 'IP'
SET @ValorAnt = @IPAnt
SET @Valor = @IP
SET @Clave1 = STR(@IdEquipo)
INSERT [dbo].[TEL_HistoricoCambios] (FECHA, TABLA, CAMPO,
VALORANTERIOR, VALORACTUAL, USUARIO, CLAVE1) values (GETDATE(), @Tabla,
@Campo, @ValorAnt, @Valor, @Usuario, @Clave1)
END
IF @TipoServicioAnt <> @TipoServicio
BEGIN
SET @Campo = 'IdTipoServicio'
SET @ValorAnt = STR(@TipoServicioAnt)
SET @Valor = STR(@TipoServicio)
SET @Clave1 = STR(@IdEquipo)
INSERT [dbo].[TEL_HistoricoCambios] (FECHA, TABLA,
CAMPO, VALORANTERIOR, VALORACTUAL, USUARIO, CLAVE1) values (GETDATE(),
@Tabla, @Campo, @ValorAnt, @Valor, @Usuario, @Clave1)
END
/* FIN HISTORICO DE CAMBIOS */
/* SINCRONIZACION CON DNS */
/* SI ANTES NO ACTUALIZABA EL DNS Y AHORA SI ==> ALTA EN EL DNS */
IF (@GeneraDNSAnt = 'N') AND (@GeneraDNS = 'S')
BEGIN
SET @DNSAlta = 'dnscmd 192.168.2.1 /RecordAdd
telecom.ute.com.uy ' + @NombreDNS + ' A ' + @IP
SET @DNSPTRAlta = 'dnscmd 192.168.2.1 /RecordAdd ' + @IPOCTETO1
+ '.in-addr.arpa ' + @IPOCTETO4 + '.' + @IPOCTETO3 + '.' + @IPOCTETO2 +
' PTR ' + @NombreDNS + '.'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSAlta + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSPTRAlta + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
END
/* SI ANTES ACTUALIZABA EL DNS Y AHORA NO ==> BAJA EN EL DNS */
IF (@GeneraDNSAnt = 'S') AND (@GeneraDNS = 'N')
BEGIN
SET @DNSPTRBaja = 'dnscmd 192.168.2.1 /RecordDelete ' +
@IPANTOCTETO1 + '.in-addr.arpa ' + @IPANTOCTETO4 + '.' + @IPANTOCTETO3
+ '.' + @IPANTOCTETO2 + ' PTR ' + @NombreDNSAnt + '. /f '
SET @DNSBaja = 'dnscmd 192.168.2.1 /RecordDelete
telecom.ute.com.uy ' + @NombreDNSAnt + ' A /f '
SET @StringAux = 'echo ' + @DNSPTRBaja + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSBaja + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
END
/* SI ANTES ACTUALIZABA EL DNS Y AHORA SIGUE ACTUALIZANDO ==> ME FIJO
SI CAMBIO EL NOMBRE O LA IP */
IF ((@GeneraDNSAnt = 'S') AND (@GeneraDNS = 'S')) AND ((@NombreDNSAnt
<> @NombreDNS) OR (@IPAnt <> @IP))
BEGIN
SET @DNSPTRBaja = 'dnscmd 192.168.2.1 /RecordDelete ' +
@IPANTOCTETO1 + '.in-addr.arpa ' + @IPANTOCTETO4 + '.' + @IPANTOCTETO3
+ '.' + @IPANTOCTETO2 + ' PTR ' + @NombreDNSAnt + '. /f '
SET @DNSBaja = 'dnscmd 192.168.2.1 /RecordDelete
telecom.ute.com.uy ' + @NombreDNSAnt + ' A /f '
SET @DNSAlta = 'dnscmd 192.168.2.1 /RecordAdd
telecom.ute.com.uy ' + @NombreDNS + ' A ' + @IP
SET @DNSPTRAlta = 'dnscmd 192.168.2.1 /RecordAdd ' + @IPOCTETO1
+ '.in-addr.arpa ' + @IPOCTETO4 + '.' + @IPOCTETO3 + '.' + @IPOCTETO2 +
' PTR ' + @NombreDNS + '.'
SET @StringAux = 'echo ' + @DNSPTRBaja + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSBaja + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSAlta + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
SET @StringAux = 'echo ' + @DNSPTRAlta + ' >>
C:\DNS\ActualizaDNS.bat'
EXEC MASTER..XP_CMDSHELL @StringAux
END
/* FIN SINCRONIZACION CON DNS */
END
/* FIN EJEMPLO */
Preguntas similare
Busqueda sugerida
Leer las respuestas