Error de contraseña DTS

Cuando aparece el error: Source: Description: Failed to decrypt protected XML node «DTS:Password» with error 0x8009000B «Key not valid for use in specified state.». You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available.

Al intentar programar la ejecucion de un job con un DTS puede aparecer el mensaje de error en la ejecucion, para esto en VS en propiedades del DTS

enter image description here

 

Y con esto solucionado el tema,

Referencia: http://stackoverflow.com/questions/9297018/ssis-issue-failed-to-decrypt-protected-xml-node

Funcion SQL para convertir cadena separada por caracter en tabla

Va la funcion

CREATE FUNCTION SplitCadena
(
 @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

Identificar Caracteres escondidos en una consulta SQL

CREATE FUNCTION dbo.ShowWhiteSpace (@str varchar(8000))
RETURNS varchar(8000)
AS
BEGIN
     DECLARE @ShowWhiteSpace varchar(8000);
     SET @ShowWhiteSpace = @str
     SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(32), '[?]')
     SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(13), '[CR]')
     SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(10), '[LF]')
     SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(9),  '[TAB]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(1),  '[SOH]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(2),  '[STX]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(3),  '[ETX]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(4),  '[EOT]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(5),  '[ENQ]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(6),  '[ACK]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(7),  '[BEL]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(8),  '[BS]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(11), '[VT]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(12), '[FF]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(14), '[SO]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(15), '[SI]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(16), '[DLE]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(17), '[DC1]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(18), '[DC2]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(19), '[DC3]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(20), '[DC4]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(21), '[NAK]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(22), '[SYN]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(23), '[ETB]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(24), '[CAN]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(25), '[EM]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(26), '[SUB]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(27), '[ESC]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(28), '[FS]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(29), '[GS]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(30), '[RS]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(31), '[US]')
     RETURN(@ShowWhiteSpace)
END
SELECT dbo.ShowWhiteSpace(myfield) from mytable

 

usar tablas temporales en sql dinamico

Caso: Se tiene una consulta SQL que se genera dinamicamente, se quiere volcar el conjunto de resultados en una tabla temporal. Se tuvo que realizar lo siguiente:


ALTER PROCEDURE [dbo].[SPS_GeneraRptPedidoDetalle]    
    @docFechaInicio [date],
    @docFechaFin [date],
    @codCliente [int],
    @sucursal [char](4),
    @ordenCompra [char](15),
    @fAprobInicio [date],
    @fAprobFin [date],
    @vendedor [int],
    @item [char](15),
    @nroDoc [char](14),
    @linea [char](6),
    @familia [char](6),
    @subfamilia [char](6)
AS
BEGIN

    DECLARE @cadenaTotal [nvarchar](max)
    DECLARE @cadenaSql [varchar](MAX)
    DECLARE @cadenaWhere [nvarchar](MAX)
    DECLARE @cadenaOrderBy [varchar](200)
    DECLARE @cadenaGroupBy [varchar](MAX)
    
    SET @cadenaTotal=N''
    SET @cadenaWhere=N''                 
    
    SET @cadenaSql='SELECT   
             t2.ClienteReferencia,
             t2.ClienteNumero,
             t2.ClienteNombre,
             t1.NumeroDocumento,
             t1.TipoDetalle,
             t1.Linea as LineaDoc,
             [t10].[DescripcionLocal] as Marca,
             t1.ItemCodigo,
             t1.Descripcion,
             t1.UnidadCodigo,
             t1.CantidadPedida,
             t1.Monto,
             t1.DocumentoRelacNumeroDocumento,
             t1.DocumentoRelacLinea,
             t1.ExportacionMarcaPaquete,             
             t2.MonedaDocumento,
             [t9].[DescripcionCorta] AS GlosaMoneda,
             t1.Estado,
             t2.Vendedor,
             [t8].[NombreCompleto] AS AsesorComercial,
             t1.IGVExoneradoFlag,
             t2.Criteria,
             t2.FechaDocumento,
             t2.FechaAprobacion,
             t1.UnidadCodigoDoble,
             t1.CantidadPedidaDoble,
             t2.Comentarios,
             t1.DocumentoRelacTipoDocumento,
             t1.TipoDocumento,
             t1.Lote,
             t1.CantidadEntregada,
             t1.PrecioUnitario,
             t1.AlmacenCodigo,
             t1.Condicion,
             t1.PorcentajeDescuento01,
             t1.PorcentajeDescuento02,
             t1.PorcentajeDescuento03,
             t1.TransferenciaGratuitaFlag,
             t1.PrecioUnitarioGratuito,
             t1.PrecioUnitarioOriginal,
             t1.MontoFinal,
             t1.PrecioUnitarioFinal,
             t2.NumeroInterno,             
             t1.NumeroSerie,
             t2.CentroCosto,
             t3.Linea as LineaItem,
             t3.Familia,
             t3.SubFamilia,
             t3.NumeroDeParte,
             t3.ItemProcedencia,
             t1.ExportacionFechaProgramacion,
             t1.exportacioncomentarios,
             t2.ClienteRUC,
             t2.RequisicionNumero,
             t4.StockActual AS StockActual,
             t4.StockActual - ISNULL(t4.StockComprometido, 0) AS StockDisponible,
             t4.StockComprometido AS StockComprometido,
             t5.StockProceso,
             t6.FechaPrometida,
             t7.ClasificacionRotacion,
             [t2].[ClienteReferencia] AS NroOC,
             (sum(t1.[CantidadPedida] - [t1].[CantidadEntregada])*t1.[PrecioUnitario]) AS Valorizado,
             (sum(t1.[CantidadPedida] - [t1].[CantidadEntregada])*t1.[PrecioUnitario]*(CASE t2.[MonedaDocumento] WHEN ' + char(39) +  'LO' + char(39) + ' THEN (1/[t2].[TipodeCambio]) ELSE 1 END )) AS ValorizadoCambio        
    INTO #tmpTemporal             
    FROM     spring.[dbo].CO_DocumentoDetalle t1
             INNER JOIN spring.[dbo].CO_Documento t2 ON (t2.CompaniaSocio = t1.CompaniaSocio)
                AND (t2.TipoDocumento = t1.TipoDocumento)
                AND (t2.NumeroDocumento = t1.NumeroDocumento)
             LEFT OUTER JOIN spring.[dbo].WH_ItemMast t3 ON t1.ItemCodigo = t3.Item
             LEFT OUTER JOIN spring.[dbo].VW_WH_ItemAlmacenStock t4 ON t1.ItemCodigo = t4.Item
                AND t1.AlmacenCodigo = t4.AlmacenCodigo
             LEFT OUTER JOIN spring.[dbo].VW_WH_ItemComprasEnProceso t5 ON t5.Item = t1.ItemCodigo
                AND t5.Companiasocio = t1.Companiasocio
             LEFT OUTER JOIN spring.[dbo].VW_WH_ItemComprasEnProcesoFecha t6 ON t6.Item = t1.ItemCodigo
                AND t6.Companiasocio = t1.Companiasocio
             LEFT OUTER JOIN spring.[dbo].WH_ItemAlmacen t7 ON t7.AlmacenCodigo = t2.AlmacenCodigo
                AND t7.Item = t1.ItemCodigo
                AND t7.Condicion = ' + char(39) + '0' + char(39) + '
             LEFT OUTER JOIN [Spring].[dbo].[PersonaMast] t8 ON t8.[Persona]=[t2].[Vendedor]
             LEFT OUTER JOIN [spring].[dbo].[MonedaMast] t9 ON t9.[MonedaCodigo]=[t2].[MonedaDocumento]
             LEFT OUTER JOIN [Spring].[dbo].[WH_Marcas] t10 ON t10.[MarcaCodigo]=[t3].[MarcaCodigo]
    WHERE    (t1.TipoDocumento = ' + char(39) + 'PE' + char(39) + ')
             AND (t1.Estado = ' + char(39) + 'PR' + char(39) + ')
             AND t1.CantidadPedida > t1.CantidadEntregada
             AND t2.Estado = ' + char(39) + 'AP' + char(39) + '
             AND (t2.CompaniaSocio = ' + char(39) + '01000000' +  char(39) + ')                          
             AND (t2.FormaFacturacion <> ' + char(39) + 'GF' + char(39) + ')
             AND (t2.TipoVenta <> ' + char(39) + 'SEP' + char(39) + ')' + 
             ' AND (CAST(t2.FechaDocumento AS date) BETWEEN @docFechaInicio AND @docFechaFin)'

    
                 
    IF @codCliente<> 0 BEGIN
        SET @cadenaWhere= @cadenaWhere + N' AND [t2].[ClienteNumero]=@codCliente'    
    END 
    
    IF @sucursal<>'0' BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND [t2].[Sucursal]=@sucursal'
    END 
    
    IF @ordenCompra<>'0' BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND [t2].[ClienteReferencia]=@ordenCompra'
    END 
    
    IF YEAR(@fAprobInicio)<>1900 AND YEAR(@fAprobFin)<>1900 BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND CAST(ISNULL([t2].[FechaAprobacion],' + char(39) + '19000101' + char(39) + ') AS date) BETWEEN @fAprobInicio AND @fAprobFin'
    END 

    IF @vendedor<>0 BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND [t2].[Vendedor]=@vendedor'
    END 
    
    IF @item<>'0' BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND [t1].[ItemCodigo]=@item'
    END 
    
    IF @nroDoc<>'0' BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND [t1].[NumeroDocumento]=@nroDoc'
    END 
    
    IF @linea<>'0' BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND [t3].[Linea]@linea'
    END 
    
    IF @familia<>'0' BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND [t3].[Familia]=@familia'
    END 
    
    IF @subfamilia<>'0' BEGIN
        SET @cadenaWhere=@cadenaWhere + N' AND [t3].[SubFamilia]=@subfamilia'
    END     
    
    SET @cadenaGroupBy=N' GROUP BY   
             t1.NumeroDocumento,
             t1.TipoDetalle,
             t1.Linea,
             [t10].[DescripcionLocal],
             t1.ItemCodigo,
             t1.Descripcion,
             t1.UnidadCodigo,
             t1.CantidadPedida,
             t1.Monto,
             t1.DocumentoRelacNumeroDocumento,
             t1.DocumentoRelacLinea,
             t1.ExportacionMarcaPaquete,
             t2.ClienteNumero,
             t2.ClienteNombre,
             t2.MonedaDocumento,
             [t9].[DescripcionCorta],
             t1.Estado,
             t2.Vendedor,
             [t8].[NombreCompleto],
             t1.IGVExoneradoFlag,
             t2.Criteria,
             t2.FechaDocumento,
             t2.FechaAprobacion,
             t1.UnidadCodigoDoble,
             t1.CantidadPedidaDoble,
             t2.Comentarios,
             t1.DocumentoRelacTipoDocumento,
             t1.TipoDocumento,
             t1.Lote,
             t1.CantidadEntregada,
             t1.PrecioUnitario,
             t1.AlmacenCodigo,
             t1.Condicion,
             t1.PorcentajeDescuento01,
             t1.PorcentajeDescuento02,
             t1.PorcentajeDescuento03,
             t1.TransferenciaGratuitaFlag,
             t1.PrecioUnitarioGratuito,
             t1.PrecioUnitarioOriginal,
             t1.MontoFinal,
             t1.PrecioUnitarioFinal,
             t2.NumeroInterno,
             t2.ClienteReferencia,
             t1.NumeroSerie,
             t2.CentroCosto,
             t3.Linea,
             t3.Familia,
             t3.SubFamilia,
             t3.NumeroDeParte,
             t3.ItemProcedencia,
             t1.ExportacionFechaProgramacion,
             t1.exportacioncomentarios,
             t2.ClienteRUC,
             t2.RequisicionNumero,
             t4.StockActual,
             t4.StockComprometido,
             t5.StockProceso,
             t6.FechaPrometida,
             t7.ClasificacionRotacion,
             [t2].[ClienteReferencia],
             t2.[TipodeCambio]'
    
    SET @cadenaOrderBy=' ORDER BY t2.FechaDocumento ASC
           , [t2].[ClienteNombre] ASC          
           , t1.NumeroDocumento ASC
           , t1.Linea ASC
           , t2.MonedaDocumento ASC;'

    DECLARE @sqlTemporal [varchar](500)
    
    SET @sqlTemporal='SELECT *, (SELECT SUM(t2.Monto) FROM #tmpTemporal t2 WHERE ISNULL(t2.ClienteReferencia,' + char(39) + char(39) + ')=ISNULL(t1.ClienteReferencia,' + char(39) + char(39) + ') AND t2.ClienteNumero=t1.ClienteNumero) AS MontoTotal
    FROM #tmpTemporal t1;
    
    DROP TABLE #tmpTemporal;'


    SET @cadenaTotal=@cadenaSql+ @cadenaWhere + @cadenaGroupBy + @cadenaOrderBy + @sqlTemporal
    
        
    EXEC sp_executesql @cadenaTotal, N'@docFechaInicio [date], @docFechaFin [date], @codCliente [int], @sucursal [char](4)
    , @ordenCompra [char](15), @fAprobInicio [date], @fAprobFin [date], @vendedor [int], @item [char](15), @nroDoc [char](14)
    , @linea [char](6), @familia [char](6), @subfamilia [char](6)'
    , @docFechaInicio, @docFechaFin, @codCliente, @sucursal
    , @ordenCompra, @fAprobInicio, @fAprobFin, @vendedor, @item, @nroDoc
    , @linea, @familia, @subfamilia


    

END 

GO 
  

Solucionar bloqueo de tablas en SQL SERVER

El sistema ERP de la empresa no podia ingresar a una opcion de la aplicacion. Esta devolvía un error por timeout de SQL.

Se solucionó bajando el proceso que hacia que se bloquee la tabla

Con el siguiente script se visualizó el bloqueo (no aparecia el bloqueo en otros metodos consultados en internet)

SELECT request_session_id sessionid,
 resource_type type,
 resource_database_id dbid,
 OBJECT_NAME(resource_associated_entity_id, resource_database_id) objectname,
 request_mode rmode,
 request_status rstatus
FROM sys.dm_tran_locks
WHERE resource_type IN ('DATABASE', 'OBJECT')

Tambien con esta consulta

EXECUTE sp_lock

Finalmente con el comando kill (ssid) se bajó el proceso conflictivo.

Se revisaron ademas las siguientes opciones

 

http://microsoftsqlsecret.fullblog.com.ar/detectar-bloqueos-sql-server-v2005-y-superiores.html

http://www.eklectopia.com/consultar-tablas-bloqueadas-en-sql-server-el-misterioso-caso-del-select/

http://www.sql-server-performance.com/2007/performance-monitor-general/

http://programacion-x.blogspot.pe/2012/07/como-identificar-bloqueos-en-sql-server.html