Aiuto per campi data

mercoledì 22 aprile 2009 - 23.10

minucci Profilo | Newbie

Devo preparare un trigger in sql che mi controlla la data in questo modo :
devo recuperare delle ore di lavoro fino al 31.12.2010, come posso far capire attraverso il codice tsql che il periodo di scadenze di queste ore è valido
fino al 31.12.2010. considerate che nel 2010 la validità delle ore dovrà essere fruita fino al 31.12.2011. Help me Grazie

lbenaglia Profilo | Guru

>Devo preparare un trigger in sql che mi controlla la data in
>questo modo :

Ciao Giuseppe,

Puoi postare un esempio completo con la struttura della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO), la logica ed il tipo di trigger che vorresti creare ed il risultato desiderato?

>Help me Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

minucci Profilo | Newbie

Ti invio il listato Grazie

lbenaglia Profilo | Guru

>Ti invio il listato Grazie
Non riesco a scaricarlo.
Postalo in formato testo

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

minucci Profilo | Newbie

Questo è il listato come vedi posso agire sui giorni ma mi occorre cortesemente una regola che calcoli queste ore da recuperare fino alla data 31.12.2010 questo per l'anno 2009 poi nel 2010 sarà fino al 31.12.2011. Grazie


CREATE TRIGGER T_CREDITO_RECUPERI_INSERT_TRIG ON [dbo].[T_COD_CREDITO_ORE_PERSONALE]
FOR INSERT
AS

DECLARE @nDataFine AS INT
DECLARE @AppoData AS DateTime

SELECT @nDataFine=nDataInizioCredito FROM T_COD_CREDITO_ORE_PERSONALE
WHERE IdCodCreditoOre IN (SELECT IdCodCreditoOre FROM INSERTED)

EXEC SP_NUMBER_TO_DATE @nDataFine , @AppoData OUTPUT
SET @AppoData=DATEADD(DAY , 365 , @AppoData)
EXEC F_DATE_TO_NUMBER @nDataFine OUTPUT, @AppoData

UPDATE T_COD_CREDITO_ORE_PERSONALE SET nDataFineCredito=@nDataFine
WHERE IdCodCreditoOre IN (SELECT IdCodCreditoOre FROM INSERTED)

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

lbenaglia Profilo | Guru

>Questo è il listato
Non mi sembra di averti chiesto il codice T-SQL del trigger: "Puoi postare un esempio completo con la struttura della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO), la logica ed il tipo di trigger che vorresti creare ed il risultato desiderato?"

>come vedi posso agire sui giorni
Che significa "puoi agire"?

> SELECT @nDataFine=nDataInizioCredito FROM T_COD_CREDITO_ORE_PERSONALE
> WHERE IdCodCreditoOre IN (SELECT IdCodCreditoOre FROM INSERTED)
E se INSERTED contenesse 327896592348652349876 righe? Valorizzaresti la variabile locale @nDataFine con il valore della colonna nDataInizioCredito relativo all'ultima riga!

> EXEC SP_NUMBER_TO_DATE @nDataFine , @AppoData OUTPUT
Che fa questa sp?

> EXEC F_DATE_TO_NUMBER @nDataFine OUTPUT, @AppoData
Che fa questa sp?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

minucci Profilo | Newbie

Ti allego il file che mi hai richiesto in modo dettagliato. Grazie in anticipo

Ti allego poi il TRIGGER che già ti avevo postato :


CREATE TRIGGER T_CREDITO_RECUPERI_INSERT_TRIG ON [dbo].[T_COD_CREDITO_ORE_PERSONALE]
FOR INSERT
AS

DECLARE @nDataFine AS INT
DECLARE @AppoData AS DateTime

SELECT @nDataFine=nDataInizioCredito FROM T_COD_CREDITO_ORE_PERSONALE
WHERE IdCodCreditoOre IN (SELECT IdCodCreditoOre FROM INSERTED)

EXEC SP_NUMBER_TO_DATE @nDataFine , @AppoData OUTPUT
SET @AppoData=DATEADD(DAY , 90 , @AppoData)
EXEC F_DATE_TO_NUMBER @nDataFine OUTPUT, @AppoData

UPDATE T_COD_CREDITO_ORE_PERSONALE SET nDataFineCredito=@nDataFine
WHERE IdCodCreditoOre IN (SELECT IdCodCreditoOre FROM INSERTED)

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

In io riesco solo a cambiare i giorni ma la nuova regola adesso è che queste ore possono essere recuperate
fino al 31.12. dell’anno successivo.

















La regola che non riesco a far applicare sarebbe che le ore di recupero possono essere fatte entro il il 31/12 dell’anno successivo Ti invio questa immagine nel quale io vorrei far uscire al campo valide al la data 31.12.2010. Il prossimo anno naturalmente quando seleziono aggiungere con una data es. 24/04/2010, dovrebbe mettermi valide al 31/12/2011.





642x336 21Kb





Questa tabella e la T_COD_CREDITO_ORE_PERSONALE, che si popola dalla maschera sopra con la data settata Valido dal.





586x140 28Kb






Questa tabella e la T_COD_RECUPERI_FATTI, si popola una volta che viene scalato il servizio giornaliero con la dicitura RECUPERO ORE



551x63 12Kb




Ti allego il listato della SP F_DATE_TO_NUMBER

CREATE PROCEDURE F_DATE_TO_NUMBER
@nDate AS INT OUTPUT,
@dDate AS DateTime
AS
DECLARE @sDate AS NVarchar(50)

SET @sDate = LTRIM(STR(YEAR(@dDate)))
SET @sDate =@sDate + RIGHT( '0' + LTRIM(STR(MONTH(@dDate))),2)
SET @sDate =@sDate + RIGHT('0' + LTRIM(STR(DAY(@dDate))),2)
SET @nDate=CAST(@sDate AS INT)
GO



Inoltre ti allego il listato della SP_NUMBER_TO_DATE

CREATE PROCEDURE SP_NUMBER_TO_DATE
@nData AS INT,
@dDataOut AS DateTime OUTPUT
AS
DECLARE @sAppoData AS NVarChar (8)

SET @sAppoData = CAST(@nData AS NVarChar(8))
SET @dDataOut = CONVERT(DateTime , SUBSTRING(@sAppoData,7,2) + '/' + SUBSTRING(@sAppoData,5,2) + '/' + SUBSTRING(@sAppoData,1,4) ,103 )
GO











Ti allego anche il listato della SP_RECUPERO_ORE

CREATE PROCEDURE SP_RECUPERO_ORE
AS
DECLARE @dAppoData AS DateTime
DECLARE @nData AS INT

SET @dAppoData=GETDATE()
EXEC SP_DATE_TO_NUMBER @dAppoData, @nData OUTPUT
EXEC SP_CHECK_RIPOSI_DEL_GIORNO @nData
GO




Grazie Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5