jueves, 1 de diciembre de 2016

Enviar correo desde SQL Server

Para enviar correo por SQL Server es a través de la sentencia:

EXEC [msdb].[dbo].[sp_send_dbmail]
@profile_name = 'NombrePerfilCorreo',
@recipients = 'correoDestino@gmail.com',
@copy_recipients = 'otroCorreo@gmail.com',
@body = 'TEST2',
@body_format='html',
@subject = 'NombreDelAsunto'


jueves, 13 de octubre de 2016

Cookies en ASP.NET C#

Para crear una Cookies en .NET se necesita colocarle un nombre propio. En C# sería:

private void createUserInformationCookie(string username, TokenSecurityGeneratedResponseTypeProxy tokenSecurity, string cookieName)
        {
            try
            {
                UserInformation userInformation = new UserInformation();
                userInformation.userName = username;
                userInformation.tokenSecurityId = tokenSecurity.tokenSecurity.TokenSecurityId;
                userInformation.businessUnitCode = tokenSecurity.tokenSecurity.BusinessUnity;
                String json = JsonConvert.SerializeObject(userInformation);
                HttpCookie cookie = new HttpCookie(cookieName);
                cookie.Expires = DateTime.Now.AddHours(Common.cookieExpirationTime);
                cookie.Value = json;
                cookie.HttpOnly = true;
                HttpContext.Response.Cookies.Add(cookie);

            }
            catch (Exception ex)
            {

            }
        }

sábado, 8 de octubre de 2016

No se puede cargar el archivo o ensamblado (Excepción de HRESULT: 0x80070020)

Cuando tengan un error en visual studio de tipo "No se puede cargar el archivo o ensamblado (Excepción de HRESULT: 0x80070020)" es probable que otro puerto está siendo usado por el mismo puerto que usa visual studio .net 80 y 443.

miércoles, 5 de octubre de 2016

SQL Service Broker

Los Service Brocker es un servicio que se activa en la base de datos del servidor del SQL Server para realizar una comunicación de Servidor a Cliente.

https://msdn.microsoft.com/es-es/library/bb522893.aspx

Las sentencias en base de datos para activar este servicio son:


ALTER DATABASE [db nameSET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

ALTER AUTHORIZATION ON DATABASE::[db name] TO [sa];

jueves, 7 de abril de 2016

SQL Server estructura de tablas

DECLARE @NAME_TABLE VARCHAR(100) = '[GRL].[COLABORADOR_CIERRE]'

--********************** CONSULTA DE COLUMNAS INDEXADAS *******************************
SELECT 
     --TableName = t.name,
     IndexName = ind.name,
     --IndexId = ind.index_id,
     --ColumnId = ic.index_column_id,
     ColumnName = col.name
     --ind.*,
     --ic.*,
     --col.*
FROM
     sys.indexes ind
INNER JOIN
     sys.index_columns ic ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN
     sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN
     sys.tables t ON ind.object_id = t.object_id
WHERE
     ind.is_primary_key = 0
     AND ind.is_unique = 0
     AND ind.is_unique_constraint = 0
     AND t.is_ms_shipped = 0
 AND t.object_id  = OBJECT_ID(@NAME_TABLE)
ORDER BY
     t.name, ind.name, ind.index_id, ic.index_column_id

--********************** CONSULTA DE COLUMNAS *******************************
SELECT
    c.name 'Columna',
    t.Name 'Tipo',
    c.max_length 'Tamaño',
    --c.precision ,
    --c.scale ,
    CASE WHEN c.is_nullable = 0 THEN 'N' ELSE 'Y' END 'Nulo',
    CASE WHEN ISNULL(i.is_primary_key, 0) = 0 THEN 'N' ELSE 'Y' END 'PK' ,
i.object_id, c.column_id,
CASE WHEN (SELECT COUNT(1) FROM  sys.foreign_key_columns WHERE parent_object_id = i.object_id
AND parent_column_id = c.column_id ) > 0 THEN 'Y'
ELSE 'N' END 'FK'
,PP.VALUE 'DESCRIPCION'
FROM  
    sys.columns c
INNER JOIN
    sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
INNER JOIN sys.extended_properties PP ON PP.major_id = C.object_id AND PP.minor_id = C.column_id
WHERE
    c.object_id = OBJECT_ID(@NAME_TABLE)


Resultado:


martes, 23 de febrero de 2016

SQL SERVER convertir números a letras

Varios nos preguntamos cómo convertir números decimales o enteros en texto (Ejm: DIEZ con 00/100 soles) en base de datos SQL Server.

Aquí tengo una función donde podría ayudar a resolver este problema.

--TEST:
--select [dbo]].[CantidadConLetra](50580.25)
CREATE FUNCTION [dbo].[CantidadConLetra]
(
    @Numero             Decimal(18,2)
)
RETURNS Varchar(180)
AS
BEGIN
    DECLARE @ImpLetra Varchar(180)
        DECLARE @lnEntero INT,
                        @lcRetorno VARCHAR(512),
                        @lnTerna INT,
                        @lcMiles VARCHAR(512),
                        @lcCadena VARCHAR(512),
                        @lnUnidades INT,
                        @lnDecenas INT,
                        @lnCentenas INT,
                        @lnFraccion INT
        SELECT  @lnEntero = CAST(@Numero AS INT),
                        @lnFraccion = (@Numero - @lnEntero) * 100,
                        @lcRetorno = '',
                        @lnTerna = 1
  WHILE @lnEntero > 0
  BEGIN /* WHILE */
            -- Recorro terna por terna
            SELECT @lcCadena = ''
            SELECT @lnUnidades = @lnEntero % 10
            SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
            SELECT @lnDecenas = @lnEntero % 10
            SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
            SELECT @lnCentenas = @lnEntero % 10
            SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
            -- Analizo las unidades
            SELECT @lcCadena =
            CASE /* UNIDADES */
              WHEN @lnUnidades = 1 THEN 'UN ' + @lcCadena
              WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadena
              WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadena
              WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadena
              WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadena
              WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadena
              WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadena
              WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadena
              WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadena
              ELSE @lcCadena
            END /* UNIDADES */
            -- Analizo las decenas
            SELECT @lcCadena =
            CASE /* DECENAS */
              WHEN @lnDecenas = 1 THEN 
                CASE @lnUnidades
                  WHEN THEN 'DIEZ '
                  WHEN THEN 'ONCE '
                  WHEN THEN 'DOCE '
                  WHEN THEN 'TRECE '
                  WHEN THEN 'CATORCE '
                  WHEN THEN 'QUINCE '
                  WHEN THEN 'DIEZ Y SEIS '
                  WHEN THEN 'DIEZ Y SIETE '
                  WHEN THEN 'DIEZ Y OCHO '
                  WHEN THEN 'DIEZ Y NUEVE '
                END 
              WHEN @lnDecenas = 2 THEN 
              CASE @lnUnidades
                WHEN THEN 'VEINTE '
                ELSE 'VEINTI' + @THEN 
              END 
              WHEN @lnDecenas = 3 THEN 
              CASE @lnUnidades
                WHEN THEN 'TREINTA '
                ELSE 'TREINTA Y ' + @lcCadena
              END 
              WHEN @lnDecenas = 4 THEN 
                CASE @lnUnidades
                    WHEN THEN 'CUARENTA'
                    ELSE 'CUARENTA Y ' + @lcCadena
                END 
              WHEN @lnDecenas = 5 THEN 
                CASE @lnUnidades
                    WHEN THEN 'CINCUENTA '
                    ELSE 'CINCUENTA Y ' + @lcCadena
                END 
              WHEN @lnDecenas = 6 THEN 
                CASE @lnUnidades
                    WHEN THEN 'SESENTA '
                    ELSE 'SESENTA Y ' + @lcCadena
                END 
              WHEN @lnDecenas = 7 THEN 
                 CASE @lnUnidades
                    WHEN THEN 'SETENTA '
                    ELSE 'SETENTA Y ' + @lcCadena
                 END 
              WHEN @lnDecenas = 8 THEN 
                CASE @lnUnidades
                    WHEN THEN 'OCHENTA '
                    ELSE 'OCHENTA Y ' + @lcCadena
                END 
              WHEN @lnDecenas = 9 THEN 
                CASE @lnUnidades
                    WHEN THEN 'NOVENTA '
                    ELSE 'NOVENTA Y ' + @lcCadena
                END 
              ELSE @lcCadena
            END /* DECENAS */
            -- Analizo las centenas
            SELECT @lcCadena =
            CASE /* CENTENAS */
              WHEN @lnCentenas = 1 THEN 'CIENTO ' + @lcCadena
              WHEN @lnCentenas = 2 THEN 'DOSCIENTOS ' + @lcCadena
              WHEN @lnCentenas = 3 THEN 'TRESCIENTOS ' + @lcCadena
              WHEN @lnCentenas = 4 THEN 'CUATROCIENTOS ' + @lcCadena
              WHEN @lnCentenas = 5 THEN 'QUINIENTOS ' + @lcCadena
              WHEN @lnCentenas = 6 THEN 'SEISCIENTOS ' + @lcCadena
              WHEN @lnCentenas = 7 THEN 'SETECIENTOS ' + @lcCadena
              WHEN @lnCentenas = 8 THEN 'OCHOCIENTOS ' + @lcCadena
              WHEN @lnCentenas = 9 THEN 'NOVECIENTOS ' + @lcCadena
              ELSE @lcCadena
            END /* CENTENAS */
            -- Analizo la terna
            SELECT @lcCadena =
            CASE /* TERNA */
              WHEN @lnTerna = 1 THEN  @lcCadena
              WHEN @lnTerna = 2 THEN @lcCadena + 'MIL '
              WHEN @lnTerna = 3 THEN @lcCadena + 'MILLONES '
              WHEN @lnTerna = 4 THEN @lcCadena + 'MIL '
              ELSE ''
            END /* TERNA */
            -- Armo el retorno terna a terna
            SELECT @lcRetorno = @lcCadena  + @lcRetorno
            SELECT @lnTerna = @lnTerna + 1
   END 
   IF @lnTerna = 1
       SELECT @lcRetorno = 'CERO'
   DECLARE @sFraccion VARCHAR(15)
   SET @sFraccion = '00' + LTRIM(CAST(@lnFraccion AS varchar))
   SELECT @ImpLetra = RTRIM(@lcRetorno) +' con '+ SUBSTRING(@sFraccion,LEN(@sFraccion)-1,2) + '/100 soles'

   RETURN @ImpLetra
END 




Para comprobar el resultado de la función, invocaremos lo siguiente:

select [dbo].[CantidadConLetra](150.60)

quedando como resultado: