Thursday, September 9, 2010

sql beautifier

http://www.ubitsoft.com/products/t-sql-beautifier/

http://www.sqlinform.com/online.phtml

http://www.dpriver.com/pp/sqlformat.htm

sql assistant (best)

Wednesday, September 8, 2010

sql tables


IF OBJECT_ID('tempdb..#reporte') IS NULL
    BEGIN
        CREATE TABLE #reporte
        (
            tra_tot  INT,
            ing_tot  FLOAT,
            hor_tra  FLOAT,
            hor_ext  FLOAT
        )
    END
  
  
        DECLARE @lt_trabajadores TABLE (
                trabajador CHAR(10),
                registro_fiscal VARCHAR(20),
                nombre VARCHAR(100),
                clave_unica VARCHAR(25),
                fecha_baja VARCHAR(40),
                concepto SMALLINT,
                importe DECIMAL
        )



Otros archivos de interés:


Leer 1
Leer 2

Friday, September 3, 2010

T SQL - usar otra bd en tiempo de ejecucion

           --    FROM   PUNKUADAM.dbo.trabajadores t
           --           INNER JOIN punkuadam.dbo.vw_nombre_separado vns
           --                ON  vns.trabajador = t.trabajador
           --           INNER JOIN punkuadam.dbo.transacciones_ns tn
           --                ON  tn.trabajador = t.trabajador
           --           INNER JOIN punkuadam.dbo.transacciones_ns tn2
           --                ON  tn2.trabajador = t.trabajador
           --           INNER JOIN punkuadam.dbo.plazas p
           --                ON  p.trabajador = t.trabajador
           --           INNER JOIN punkuadam.dbo.puestos p2
           --                ON  p.puesto = p2.puesto

Wednesday, September 1, 2010

Obtener Numero lunes, Martes, miercoles en un rango de fechas

DECLARE @pd_inicio    AS SMALLDATETIME,
        @pd_fin       AS SMALLDATETIME,
        @pn_dia       AS SMALLINT

DECLARE @ln_total     AS SMALLINT
DECLARE @ln_datepart  AS SMALLINT
SET @ln_total = 0

SET @pd_inicio = '20100601'
SET @pd_fin = '20100630'
SET @pn_dia = 7 -- 1 lunes

PRINT @pn_dia
PRINT DATEPART(dw, @pd_inicio)

SET @ln_datepart = DATEPART(dw, @pd_inicio)


IF @pn_dia < DATEPART(dw, @pd_inicio)
    SET @pd_inicio = DATEADD(week, DATEDIFF(week, 0, @pd_inicio), 6 + @pn_dia)
ELSE
    IF @pn_dia > DATEPART(dw, @pd_inicio)
    SET @pd_fin = @pd_fin - (@pn_dia - DATEPART(dw, @pd_inicio))
--    SET @pd_inicio = DATEADD(
--            week,
--            DATEDIFF(week, 0, @pd_inicio),
--            @pn_dia - DATEPART(dw, @pd_inicio)
--    )

 IF @ln_datepart = 7 AND @pn_dia <> 7--funciona en agosto 2010
    SET @pd_inicio = DATEADD(d, -7, @pd_inicio)

    
WHILE @pd_inicio <= @pd_fin
BEGIN
    PRINT @pd_inicio
    SET @pd_inicio = DATEADD(d, 7, @pd_inicio)
    SET @ln_total = @ln_total + 1
END

SELECT @ln_total
      
       --fucnion origginal con 7 devuelve el sig lunes
       --select    dateadd(week, datediff(week, 0, getdate()),7)




---------------------------------------------------

OTRA FUNCION
IF OBJECT_ID('fn_hrv5_ec_get_numero_dias') IS NOT NULL
    DROP FUNCTION fn_hrv5_ec_get_numero_dias
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION fn_hrv5_ec_get_numero_dias
(
    @pd_inicio  AS SMALLDATETIME,
    @pd_fin     AS SMALLDATETIME,
    @pn_dia     AS SMALLINT --dia de la semana -- lunes = 1
)
RETURNS SMALLINT
AS
BEGIN
    DECLARE @offset  INT,
            @total_dias    AS SMALLINT
  
    SELECT @offset = CASE @pn_dia
                          WHEN 1 THEN 1
                          WHEN 2 THEN 2
                          WHEN 3 THEN 3
                          WHEN 4 THEN 4
                          WHEN 5 THEN 5
                          WHEN 6 THEN 6
                          WHEN 7 THEN 0
                     END
  
    SET @total_dias = DATEDIFF(
            WEEK,
            DATEADD(DAY, -@offset, @pd_inicio),
            DATEADD(DAY, -@offset, @pd_fin)
        )
  
    IF @pn_dia = DATEPART(dw, @pd_inicio)
        SET @total_dias = @total_dias + 1
  
    RETURN @total_dias
END
GO



DECLARE @ld_inicio  AS SMALLDATETIME
DECLARE @ld_fin     AS SMALLDATETIME

SET @ld_inicio = '20100601'
SET @ld_fin = '20100630'


SELECT dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 7),
       dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 1),
       dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 2),
       dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 3),
       dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 4),
       dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 5),
       dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 6)



revisar
http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html