/*************************************** * STORED stp_consumaMP * * Salva il movimento di consumo dell'UDC di MP indicato * * Steamware, S.E.L. * mod: 2010.10.12 * ****************************************/ CREATE PROCEDURE [BatchQueue].[stp_consumaMP] ( @XRPQLN INT, -- è il num rap qualità @XNRETI NVARCHAR(10), -- è il numUdc prog AS400 @XDTPRO INT, -- data 8 cifre aaaammgg Data Prelievo Fusione @XTRPRO NVARCHAR(5), -- turno prelievo ( solo se interno ) @XDESMT NVARCHAR(3), -- destinatario int/terzista ( F01 / T01 ) @XCDTER NVARCHAR(6) -- cod terzista ( Anagrafico Depositi ) ) AS -- Salva consumo cartellini Rapporti qualità Materia Prima -- FILE XOGIX00F -- LIBRERIA TEST MAZZT_DTV3 -- LIBRERIA EFFETT. TEKAL TEKA_DATV3 -- LIBRERIA EFFETT. SP POSN_DATV3 /* PER TESTARE DECLARE @XRPQLN INT, -- è il num rap qualità @XNRETI NVARCHAR(10), -- è il numUdc prog @XDTPRO INT, -- data 8 cifre aaaammgg @XTRPRO NVARCHAR(5), -- turno @XDESMT NVARCHAR(3), -- destinatario int/terzista @XCDTER NVARCHAR(6) -- cod terzista SET @XRPQLN = 905793 -- è il num rap qualità SET @XNRETI = 'U100548151' -- è il numUdc prog SET @XDTPRO = 20100723 -- data 8 cifre aaaammgg SET @XTRPRO = 'S' -- turno SET @XDESMT = 'F01' -- destinatario int/terzista SET @XCDTER = '' -- cod terzista */ DECLARE @SQL AS NVARCHAR(4000); DECLARE @SqlOK AS INT; DECLARE @As400File AS NVARCHAR(50) = ''; DECLARE @As400Linked AS NVARCHAR(50) = ''; -- Linked Server AS400 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 -- TEST per generare errore -- SET @XDTPRO = 99999920100723 -- data 8 cifre aaaammgg -- ============================================================== -- Creo l'istruzione SQL e faccio chiamata su AS400 -- Aggiorno solo se su As400 Legascar è N XMATSC = 'N' mettendo poi S -- indico su As400 che il cartellino UDC della Lega è stato scaricato -- ============================================================== SET @SQL = N'UPDATE OPENQUERY(' + @As400Linked SET @SQL = @SQL + N', ''SELECT * FROM ' + @As400File SET @SQL = @SQL + ' WHERE XRPQLN = ' + CAST(@XRPQLN AS NVARCHAR(20)) -- Numero Rapporto Qualita SET @SQL = @SQL + ' AND XMATSC = ''''N'''' AND XNRETI = ''''' + @XNRETI + ''''''' ) ' -- non ancora scaricato ('N') e Numero UDC AS400 SET @SQL = @SQL + 'SET XDTPRO = ' + CAST(@XDTPRO AS NVARCHAR(8)) -- Data SET @SQL = @SQL + ', XTRPRO = ''' + @XTRPRO + '''' -- Turno SET @SQL = @SQL + ', XDESMT = ''' + @XDESMT + '''' -- Destinatario SET @SQL = @SQL + ', XMATSC = ''S''' -- Flag Lega Scaricata SET @SQL = @SQL + ', XCDTER = ''' + @XCDTER + ''''; -- Cod Terzista -- Eseguo il comando T-SQL verso AS400 EXEC sp_executesql @SQL; -- EXEC @SqlOK = sp_executesql @SQL se faccio così non mi valorizza la variabile se da errore END TRY BEGIN CATCH -- se entro nel CATCH c'è stato un errore quindo lo memorizzo SET @SqlOK = ERROR_NUMBER(); END CATCH -- Test di lettura - Modifica 14/06/2011 IF @SqlOK = 0 -- Se sp_executesql è Ok BEGIN SET @SqlOK = -1 -- lo rimetto a 0 solo se lettura è OK -- Controllo che l'UDC sia stato scaricato in modo corretto su AS400 DECLARE @SQL2 AS NVARCHAR(4000); DECLARE @LettoOk AS INT = 99; SET @SQL2 = N'SELECT @LettoOk = COUNT(*) FROM OPENQUERY(' + @As400Linked SET @SQL2 = @SQL2 + N', ''SELECT XRPQLN FROM ' + @As400File SET @SQL2 = @SQL2 + N' WHERE XRPQLN = ' + CAST(@XRPQLN AS NVARCHAR(20)) -- Numero Rapporto Qualita SET @SQL2 = @SQL2 + N' AND XNRETI = ''''' + @XNRETI + '''''' -- Numero UDC AS400 SET @SQL2 = @SQL2 + N' AND XMATSC = ''''N''''' -- non ancora scaricato ('N') SET @SQL2 = @SQL2 + N''' ) ' EXEC sp_executesql @SQL2, N'@LettoOk INT OUTPUT', @LettoOk OUTPUT; -- Se trovo record UDC non scaricato lo imposto come errore -2 altrimenti tutto OK IF @LettoOk = 0 SET @SqlOK = 0 ELSE SET @SqlOK = -2 END -- Fine Modifica - Modifica 14/06/2011 -- Memorizzo il comando per verifica T-SQL e l'esito del comando se 0 è OK INSERT INTO RawData.AS400_Comandi SELECT GETDATE(), 'stp_consumaMP', @SQL, @SqlOK; -- è possibile sollevare un RAISERROR ??? come si comporta poi il programma? -- NON SI FANNO RAISE ERROR!!!!! RETURN @SqlOK; /* -- sono tutte su DB di test SELECT XRPQLN, XNRETI , XDTPRO, XTRPRO, XDESMT, XMATSC, XCDTER FROM OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ') -- Resetto l'UDC UPDATE OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ') SET XDTPRO = 0 , XTRPRO = '', XDESMT = '', XMATSC = 'N', XCDTER = '' -- Comando OK -- UPDATE OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ') -- SET XDTPRO = 20100723 , XTRPRO = 'S', XDESMT = 'F01', XMATSC = 'N', XCDTER = '' */