Augusto Humire Martinez web blog

algo de web-in

Cambiar Collation a una columna

ALTER TABLE Operacion
ALTER COLUMN CodigoCliente NVARCHAR(50)
COLLATE SQL_Latin1_General_CP1_CI_AS NULL
GO

agosto 10, 2020 Posted by | Base de Datos | Deja un comentario

Objetos de un esquema

SELECT 1–*
,(SCHEMA_NAME(schema_id) + ‘.’ + name) AS object_name
,SCHEMA_NAME(schema_id) AS schema_name
,type
,type_desc
,create_date
,modify_date
FROM sys.objects A
WHERE 1 = 1
AND modify_date > GETDATE() – 3000
AND type = ‘U’ –[U:User Table|P:Procedure]
AND SCHEMA_NAME(schema_id) = ‘RC’
AND NAME NOT LIKE ‘x_%’
ORDER BY A.modify_date;
GO

agosto 9, 2020 Posted by | Base de Datos | Deja un comentario

Encontrar una columna en SQL Server

SELECT sysobjects.name AS table_name, syscolumns.name AS column_name,
systypes.name AS datatype, syscolumns.LENGTH AS LENGTH
FROM sysobjects INNER JOIN
syscolumns ON sysobjects.id = syscolumns.id INNER JOIN
systypes ON syscolumns.xtype = systypes.xtype
WHERE (sysobjects.xtype = ‘U’)
and (UPPER(syscolumns.name) like upper(‘%IdAgencia%’))
ORDER BY sysobjects.name, syscolumns.colid

diciembre 6, 2019 Posted by | Base de Datos | Deja un comentario

MSProject

1.- Campo %Esperado, %Planificado

Crear campo personalizado “%Planificado” con la siguiente formula:

Format(IIf([Fecha actual]<[Comienzo];0;IIf([Fecha actual]>[Fin];1;ProjDateDiff([Comienzo];[Fecha actual];[Calendario del proyecto])/[Duración]));”0%”)

Agregar la columna, Listo.

 

 

noviembre 27, 2019 Posted by | Uncategorized | Deja un comentario

Regular Expressions utiles

Algunas Expresiones Utiles

Este no pretender ser un tutorial ni mucho menos un manual, solo pondre alguno de las expresiones que sirvieron en algun momento, y lo tendre como ayuda memoria, si ha alguien le sirve o quiere colaborar con algunos, go ahead.

Trim()
^[ \t]+|[ \t]+$

Formato de correo electronico
^[a-z0-9!#$%&’*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&’*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

IPv4
/b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)b/

IPv6
(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

DNI
^\d{8}(?:[-\s]\d{4})?$

RUC
^((?!(10-20))[0-9]{11})$

Contraseña (8 a 16 digitos, al menos un digito, una minuscula, una mayuscula, un caracter no alfanumerico)
^(?=.*\d)(?=.*[\u0021-\u002b\u003c-\u0040])(?=.*[A-Z])(?=.*[a-z])\S{8,16}$

Econtrar palabra excepto
Encontrar el caracter “:” excepto los que se parecen a “?:” (para hacer split de una cadena usando regex) https://dotnetfiddle.net/PeVuMM
(?<!\?):


string input = "AV Rocket 456:CONTACT?:JANE OR TARZAN:URL?:http?://www.jane.com:Time Delivered 18?:15:Product Description";
string pattern = @"(?<!\?):";

Resultado:

'AV Rocket 456'
'CONTACT?:JANE OR TARZAN'
'URL?:http?://www.jane.com'
'Time Delivered 18?:15'
'Product Description'
String s = "foobar barbar beachbar crowbar bar ";
string pattern = \w*(?<!foo)bar

Resultado

barbar
beachbar
crowbar
bar

https://dotnetfiddle.net/PeVuMM

 

http://w3.unpocodetodo.info/utiles/regex.php
https://dotnetfiddle.net/

 

octubre 24, 2019 Posted by | Uncategorized | Deja un comentario

Obtener identity de un insert masivo o por lotes con output

Alguna vez hemos necesitado registrar valores en la tabla masivamente o por lotes para hacer un registro mucho mas rapido, pero ocurre si la tabla destino tiene un identity definida en la llave primaria?

Se puede obtener los identity de forma masiva tambien?
La respuesta es si, esto se logra con OUTPUT este commando nos puede retornar los campos las filas insertadas, aicionalmente un pequeño artilugio y voila, tenemos todos los indentity generados de un solo golpe.

Este es un ejemplo de como funcionaria

Cree las siguientes tablas y llene tantos valores considere necesario a la tabla DailyEvent, la otra tabla Incident puede dejarla vacia (es la tabla destino, la que contiene los identity a capturar)

—————————————————————————-
CREATE TABLE [dbo].[DailyEvent](
[Location] [varchar](100) NULL,
[Type] INT DEFAULT 0,
[ClientId] [varchar](100) NULL,
[TimeEvent] [varchar](100) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Incident](
[IncidentId] [int] IDENTITY(1,1) PRIMARY KEY
[Location] [varchar](100) NULL,
[Type] [int] NULL,
[ClientId] [varchar](100) NULL,
[TimeEvent] [varchar](100) NULL,
[Guid] [varchar](100) NULL
)
GO
—————————————————————————-

Luego de llenar la tabla DailyEvent (la que contendria los datos origen en su proyecto)

ejecute el siguiente script y verá que la tabla #TEMPORAL_TABLE contiene todos Identity que se registraron en la tabla Incident, luego de ello haga los Ud desee con los datos que tiene en #TEMPORAL_TABLE, al fin y al cabo los tiene todos alli incluyendo los Id generados masivamente.

—————————————————————————-
IF object_id(‘tempdb..#TEMPORAL_TABLE’) IS NOT NULL
BEGIN
DROP TABLE #TEMPORAL_TABLE;
END

SELECT
0 AS IncidentId
,Location
,Type
,ClientId
,TimeEvent
,NEWID() AS Guid
INTO #TEMPORAL_TABLE
FROM DailyEvent DE
WHERE Type = 2 –CRASH CAR

DECLARE @pivotTable TABLE (IncidentId INT, Guid VARCHAR(100))

INSERT INTO Incident
(
Location
,Type
,ClientId
,TimeEvent
,Guid
)
OUTPUT inserted.IncidentId, inserted.Guid
INTO @pivotTable
SELECT
Location
,Type
,ClientId
,TimeEvent
,Guid
FROM #TEMPORAL_TABLE

UPDATE TT SET
TT.IncidentId = PP.IncidentId
FROM #TEMPORAL_TABLE AS TT
INNER JOIN @pivotTable AS PP ON PP.Guid = TT.Guid

SELECT * FROM #TEMPORAL_TABLE
—————————————————————————-

Voila.

mayo 10, 2018 Posted by | Uncategorized | 1 comentario

Como buscar un campo en la base de datos

SELECT TABLE_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE ‘%campo_que_quiero_buscar%’

mayo 4, 2018 Posted by | Uncategorized | Deja un comentario

Como buscar texto en un procedimiento alamacenado

SELECT DISTINCT
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like ‘%texto_buscado%’;

diciembre 19, 2015 Posted by | Uncategorized | Deja un comentario

Filas actualizadas o afectadas en un Update Sql Server

Para recordar, como saber que filas se actualizaron en un update masivo, normalmente conocemos cuantos fueron afectados pero como identificar cuales fueron los registros actualizados?… cuales exactamente se actualizaron?, para ello utilizamos output (salida de los actualizados) y into (destino de los actualizados) dentro de un update

CREATE TABLE #tablaResultado
(
[Empresa] [varchar](50) NULL,
[Anio] [varchar](50) NULL,
[numeroDocumento] [varchar](50) NULL,
[Estado] [BIT] DEFAULT  0
)

UPDATE DB..Facturas
SET CodigoElectronico = CC.CodigoElectronico
,NombreEstado = CC.NombreEstado
,Mensaje = CC.Mensaje
OUTPUT ‘EMP’, CC.Anio, CC.numeroDocumento, 1
INTO #tablaResultado
FROM DB..Facturas FA WHERE FA.id IN (’11’,’12’,’13’,’14’)

OUTPUT Define los campos de los registros actualizados
INTO Define el destino donde se registrara los campos afectados

Como vemos el update que se esta ejecutando es uno masivo, y con esto ya sabemos que registros fueron los que se actualizaron para seguramente hacer algo con ellos despues.

El siguiente es otro ejemplo mas complejo, puesto que la idea es saber que registros fueron modificados segun una lista enviada. Explicando mas claramente… Si tuviera 1000 registros para actualizar, cuales de los mil se actualizaron, para ellos utilizaremos un campo estado que define cuales se actualizaron y cuales no.

CREATE TYPE [dbo].[Comprobante] AS TABLE(
[Empresa] [varchar](3) NULL,
[Anio] [varchar](4) NULL,
[numeroDocumento] [varchar](10) NULL,
[CodigoElectronico] [varchar](3) NULL,
[NombreEstado] [varchar](255) NULL,
[Mensaje] [varchar](255) NULL
[Estado] [BIT] = 0
)

CREATE PROCEDURE [usp_Actualiza_Estado_Comprobantes]
@comprobantesList as [Comprobante] READONLY
AS

CREATE TABLE #tablaResultado
(
[Empresa] [varchar](50) NULL,
[Anio] [varchar](50) NULL,
[numeroDocumento] [varchar](50) NULL,
[Estado] [BIT] DEFAULT  0
)

UPDATE DB..Facturas
SET CodigoElectronico = CC.CodigoElectronico
,NombreEstado = CC.NombreEstado
,Mensaje = CC.Mensaje
OUTPUT ‘301’, CC.Anio, CC.numeroDocumento, 1
INTO #tablaResultado
FROM DB..Facturas FA
INNER JOIN @comprobantesList CC ON (CC.numeroDocumento = FA.Documento AND CC.Anio = FA.Anio)

INSERT INTO #tablaResultado
SELECT Empresa, Anio, numeroDocumento, 0
FROM
(
SELECT Empresa, Anio, numeroDocumento
FROM @comprobantesList CC
EXCEPT
SELECT Empresa, Anio, numeroDocumento
FROM #tablaResultado TR
) tablaNoActualizados

SELECT * FROM #tablaResultado

DROP TABLE #tablaResultado

GO

DECLARE @comprobantesList as dbo.[Comprobante]
INSERT INTO @comprobantesList VALUES(‘301′,’2015′,’1300002790′,’0′,’bla bla’,’bla bla’)
INSERT INTO @comprobantesList VALUES(‘301′,’2015′,’1377002790′,’0′,’bla bla’,’bla bla’)
INSERT INTO @comprobantesList VALUES(‘301′,’2015′,’1377002890′,’0′,’bla bla’,’bla bla’)
exec [usp_Actualiza_Estado_Comprobantes] @comprobantesList

go

junio 5, 2015 Posted by | Base de Datos | 2 comentarios

Split in Sql Server

Funcion que emula la funcion split del lenguaje C#, debera crear una funcion y lugo llamarla tal como se muestra a continuacion.

CREATE FUNCTION bsl_Split
(
   @cadena VARCHAR(MAX)
   ,@separator VARCHAR(MAX)
)
RETURNS @tabla TABLE
(
   value VARCHAR(MAX)
)
BEGIN

   DECLARE @individual varchar(max) = null

   WHILE LEN(@cadena) > 0
   BEGIN
      IF PATINDEX(‘%’ + @separator + ‘%’,@cadena) > 0
      BEGIN
         SET @individual = SUBSTRING(@cadena, 0, PATINDEX(‘%’ + @separator + ‘%’,@cadena))
         INSERT INTO @tabla values(@individual)

         SET @cadena = SUBSTRING(@cadena, LEN(@individual + @separator) + 1,       LEN(@cadena))
      END
      ELSE
      BEGIN
         SET @individual = @cadena
         SET @cadena = NULL
         INSERT INTO @tabla values(@individual)
      END
   END;

   RETURN;
END
go

SELECT * FROM dbo.bsl_Split(‘a,f,g,b,v,f,r’, ‘,’)

Resultado
===============
a
f
g
b
v
f
r

 

Imagen

agosto 22, 2013 Posted by | Uncategorized | | 1 comentario