Sintaxis SQL para generar
http://www.sql-server-helper.com/tips/generate-random-numbers.aspx
Otro sitio realizado con WordPress
ALTER DATABASE [DASHBOARD] SET RECOVERY SIMPLE; GO DBCC SHRINKFILE(DASHBOARD_log,1) GO ALTER DATABASE [DASHBOARD] SET RECOVERY FULL GO
Query para obtener informacion sobre estado y uso de una base de datos
EXEC sp_helpdb DASHBOARD
DECLARE @x [int]
SET @x=30
SELECT [name] FROM [sys].[objects] WHERE [type]=’P’ AND DATEDIFF(d,[create_date], GETDATE()) < @x
SELECT [name] FROM [sys].[objects] WHERE [type]=’P’ AND DATEDIFF(d,[modify_date], GETDATE()) < @x
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
Y con esto solucionado el tema,
Referencia: http://stackoverflow.com/questions/9297018/ssis-issue-failed-to-decrypt-protected-xml-node
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
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
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
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