/*************************************** * STORED stp_batch_RapQual_S01 * * Esegue lo step 1 (caricamento dati RAW da AS400) per la tab dei rapporti di qualità * * Steamware, S.E.L. * mod: 2010.09.23 * ****************************************/ CREATE PROCEDURE BatchQueue.stp_batch_RapQual_S01 ( @minData DATETIME ) AS SET NOCOUNT ON; -- BOZZA DA TESTARE A CURA MAZZUCCONI!!! -- Caricamento Rapporti qualità Materia Prima -- FILE XOGIX00F -- LIBRERIA TEST MAZZT_DTV3 -- LIBRERIA EFFETTIVA TEKAL TEKA_DATV3 -- LIBRERIA EFFETTIVA POSS POSN_DATV3 /* XRPQLN AS nRapQual XRPQLD AS DataRapQual XNRETI AS ProgUDC XCDFOR AS CodFor XCDTER AS DestTerz XCDPAR AS CodLega XDTPRO AS DataPrelFus XTRPRO AS TurnoPrelFus XQTPRO AS Qta XDESMT AS DestLega XMATSC AS LegaScaric XBENQL AS BenesQual WHERE XRPQLN <> 0 -- Se il n. rapporto di qualità è zero non sono cartellini materia prima L'UPDATE FUNZIONA VERSO AS400 */ DECLARE @SQL AS NVARCHAR(4000); DECLARE @SqlOK AS INT; DECLARE @As400File AS NVARCHAR(50) = ''; DECLARE @As400Linked AS NVARCHAR(50) = ''; -- Linked Server AS400 DECLARE @dataAs400 AS VARCHAR(8); SET @dataAs400 = (SELECT dbo.dateToAsFormat(@minData)); SET @SqlOK = 0; -- In base al nome del DB e della stored recupero il Linked Server e file di AS400 27/06/2013 SET @As400Linked = ( SELECT dbo.f_getLikedAS400(DB_NAME()) ); SET @As400File = ( SELECT dbo.f_getLibreriaAS400 ( DB_NAME() , OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID) ) ) BEGIN TRY -- svuoto tab raw attuale TRUNCATE TABLE RawData.XOGIX00F; -- Leggo tutti gli UDC dei rapporti di qualità a partire dalla data richiesta -- escludendo quelli con Numero Rapporto di qualità a zero ( non sono rapporti di qualità ) -- CREO L'ISTRUZIONE SQL DI INSERT PARAMETRICA SET @SQL = N'INSERT INTO RawData.XOGIX00F SELECT XRPQLN ,XRPQLD ,XNRETI ,XCDFOR ,XCDTER ,XCDPAR ,XDTPRO ,XTRPRO ,XQTPRO ,XDESMT ,XMATSC ,XBENQL FROM OPENQUERY(' + @As400Linked SET @SQL = @SQL + N', ''SELECT * FROM ' + @As400File SET @SQL = @SQL + ' WHERE XRPQLN <> 0 AND XRPQLD >= ' + @dataAs400 + ' '' ) ' -- Eseguo il comando T-SQL verso AS400 e testo se OK -- EXEC @SqlOK = sp_executesql @SQL se faccio così non mi valorizza la variabile se da errore EXEC sp_executesql @SQL; END TRY BEGIN CATCH -- nel caso di errore ne salvo il numero SET @SqlOK = ERROR_NUMBER(); -- PRINT ERROR_NUMBER() END CATCH -- Memorizzo il comando per verifica T-SQL e l'esito del comando se 0 è OK INSERT INTO RawData.AS400_Comandi SELECT GETDATE(), 'stp_batch_RapQual_S01', @SQL, @SqlOK; -- è possibile sollevare un RAISERROR ??? come si comporta poi il programma? -- NON SI FANNO RAISE ERROR E NON SI RESTITUISCE CODICE!!!!! RETURN