Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di rby
    Registrato dal
    Feb 2010
    Messaggi
    65

    Stored procedure che richiama un altra Stored procedure

    Mi sto cimentando in una Stored procedure Sql Server 2014 che scrive una query che crea n stringhe per inserire i dati provenienti da un DB ad un altro. Faccio questo per evitare i problemi di esportazione delle tabelle da una macchina di produzione. Mi collego quindi al DB Master, estraggo tutti i nomi ed i tipi di campo e creo una stringa sql che quando viene fatta girare mi crea tante righe di insert quante sono le righe della tabella con i valori di tutti i campi. Questa riga di query la inserisco in una tabella chiamata Popola_Tabelle. Questo funziona egregiamente avendo risolto anche il problema dei campi char che hanno il singolo apice ! Volevo fare qualcosa di più. Eseguire questa SP per tutte le tabelle che per es. hanno nel nome la parola 'causali'. Quindi ho fatto un'altra query che estraendo dal Master i nomi delle tabelle interessate richiama la SP precedente in modo da aggiungere nella Popola_Tabelle una riga per ogni tabella da elaborare. Sto uscendo pazzo perché la SP interna se chiamata a mano funziona, ma se la chiamo da un'altra SP funziona ma mi inserisce delle righe con il valore NULL.
    Qualcuno mi sa dire se ci sono delle limitazioni nel chiamare una SP da un'altra SP ??.
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da rby Visualizza il messaggio
    ......Qualcuno mi sa dire se ci sono delle limitazioni nel chiamare una SP da un'altra SP ??.......
    No, non ci sono limitazioni

    codice:
    USE [NomeDataBase]
    GO
    
    CREATE PROCEDURE [dbo].[Procedura2] 
    AS
    print 'Eseguo la Procedura 2'
    GO
    
    -- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
    CREATE PROCEDURE [dbo].[Procedura1]
    AS
    print 'Eseguo la Procedura 1 '
    
    -- Adesso invece lancio la Procedura2
    EXEC Procedura2
    
    GO

  3. #3
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Pero non mi è chiaro quel sistema "erotico/fantasioso" per trasferire le tabelle
    e confesso che mi incuriosisce

    Hai una tabella Master
    Crei una tabella temporanea piu o meno con questi record

    CREATE TABLE
    T1
    eccetera
    INSERT INTO T1
    VALUES(
    1° record con tutti i campi
    2° record con tutti i campi
    eccetera
    )

    CREATE TABLE
    T2
    eccetera
    INSERT INTO T2
    VALUES(
    1° record con tutti i campi
    2° record con tutti i campi
    eccetera
    )



    Dopo porti in giro questa tabella temporanea e con altro codice "svolgi"
    al contrario la tabella Temporanea per ricreare le tabella Master di origine

    Ho capito bene ????
    Ti scrivi quindi le righe dello script in una tabella fisica ???

  4. #4
    Utente di HTML.it L'avatar di rby
    Registrato dal
    Feb 2010
    Messaggi
    65
    Quote Originariamente inviata da nman Visualizza il messaggio
    Pero non mi è chiaro quel sistema "erotico/fantasioso" per trasferire le tabelle
    e confesso che mi incuriosisce

    Hai una tabella Master
    Crei una tabella temporanea piu o meno con questi record

    CREATE TABLE
    T1
    eccetera
    INSERT INTO T1
    VALUES(
    1° record con tutti i campi
    2° record con tutti i campi
    eccetera
    )

    CREATE TABLE
    T2
    eccetera
    INSERT INTO T2
    VALUES(
    1° record con tutti i campi
    2° record con tutti i campi
    eccetera
    )



    Dopo porti in giro questa tabella temporanea e con altro codice "svolgi"
    al contrario la tabella Temporanea per ricreare le tabella Master di origine

    Ho capito bene ????
    Ti scrivi quindi le righe dello script in una tabella fisica ???
    Per spostare una tabella la faccio diventare una serie di insert. Ho creato una stored procedure che se eseguita mi crea una tabella con tante righe quante sono le righe della tabella originaria soltanto che ogni riga è una insert. In questo modo portandomi via con un copia ed incolla la tabella la posso replicare in un'altra macchina.
    La SP mi crea quindi in una tabella temporanea una riga fatta così :

    Select 'insert into [dbo].[CausaliRuolo] values (' , rTrim(Ditta) , ', ', rTrim(Cod_Componente) , ', ', rTrim(Causale) , ', ''', rTrim(REPLACE(Des_Componente,char(39) ,char(39)+char(39))), '''' , ') ' from dbo.CausaliRuolo

    Questa riga se mandata in esecuzione mi crea una nuova tabella con tante insert così :

    insert into [dbo].[CausaliRuolo] values (1, 1, 0, 'Quota Variabile')
    insert into [dbo].[CausaliRuolo] values (1, 2, 0, 'Componente 2')

    E queste righe le posso utilizzare in un'altra macchina per popolare la tabella. Come dicevo, la SP funziona egregiamente se la chiamo manualmente per ogni singola tabella e le righe appena riportate ne sono un esempio in quanto provengono direttamente dal suo output. Il problema è che se richiamo questa SP da un'altra SP che ha letto i nomi delle tabelle da elaborare il risultato sono delle righe con NULL nella riga.
    Sto cercando anche di utilizzare il Debug di Management Studio di Sql Server, ma non ne sto venendo a capo.

  5. #5
    non è che siamo alla re-invenzione dell'acqua calda? SQL Server ha già delle soluzioni integrate per queste cose https://msdn.microsoft.com/it-it/lib...=sql.120).aspx

  6. #6
    scusa, ma non capisco perché ti sei creato una procedura quando SQL Server ha già gli strumenti. Oltre a SSIS puoi anche usare la funzione Crea Script

  7. #7
    Utente di HTML.it L'avatar di rby
    Registrato dal
    Feb 2010
    Messaggi
    65
    Quote Originariamente inviata da optime Visualizza il messaggio
    scusa, ma non capisco perché ti sei creato una procedura quando SQL Server ha già gli strumenti. Oltre a SSIS puoi anche usare la funzione Crea Script
    Ma la funzione di crea script mi crea la tabella, non me la popola.
    Quello che viene creato e' questo :

    INSERT INTO [dbo].[CausaliRuolo]
    ([Ditta]
    ,[Cod_Componente]
    ,[Causale]
    ,[Des_Componente])
    VALUES
    (<Ditta, int,>
    ,<Cod_Componente, smallint,>
    ,<Causale, smallint,>
    ,<Des_Componente, varchar(200),>)
    GO

    Che non e' certo la tabella completa.
    MySql invece l fa come dici tu.
    Comunque sto scaricando SSDT come hai detto in un post precedente per provarlo ed eseguirlo, ma non posso utilizzarlo nella macchina di produzione in quanto è del cliente e non voglio installare nulla al di fuori dei programmi e dati di produzione.

  8. #8
    non parlo di Script Database As, ma di Task|Generate Script

    guarda qui http://lnx.dicesare.com/sql/sql-ripr...database-2005/

    lo scopo dell'articolo è diverso, ma trovi sicuramente lo spunto. è praticamente il dump di mysql

  9. #9
    Utente di HTML.it L'avatar di rby
    Registrato dal
    Feb 2010
    Messaggi
    65
    Quote Originariamente inviata da optime Visualizza il messaggio
    non parlo di Script Database As, ma di Task|Generate Script

    guarda qui http://lnx.dicesare.com/sql/sql-ripr...database-2005/

    lo scopo dell'articolo è diverso, ma trovi sicuramente lo spunto. è praticamente il dump di mysql
    WOW !!
    Avevi ragione!
    Sono entrato nella pagina ed ho trovato la soluzione. Adesso posso fare come con MySql.
    Non sai quante volte ho bestemmiato per trasportare i dati da una macchina all'altra in quanto le versioni non erano compatibili e desideravo di essere su di un DB MySql!.
    La mia non era una masturbazione mentale, ma una necessità di cui avevo più volte avuto bisogno e per questo mi ero deciso di arrangiarmi con le mie poche conoscenze di Transact Sql.

    Grazie.

  10. #10
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da nman Visualizza il messaggio
    Pero non mi è chiaro quel sistema "erotico/fantasioso" per trasferire le tabelle ......
    Quote Originariamente inviata da optime Visualizza il messaggio
    non è che siamo alla re-invenzione dell'acqua calda? .......
    Quote Originariamente inviata da rby Visualizza il messaggio
    .......La mia non era una masturbazione mentale, ma una necessità .......
    Pero c'è da dire che a livello tecnico sei stato bravo a riuscire a mettere in piedi il sistema ....

    .

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.