none
recupero singolo campo da tabella tvp RRS feed

  • Domanda

  • ho la necessità di recuperare uno o piu campi da una tabella virtuale dichiarata come parametro nella stored procedure, mi spiego meglio:

    ho definito un nuovo tipo di dato, ovvero una tabella composta da 2 colonne: nvarchchar, nvarchar.
    la stored procedure accetta tra gli altri parametri, uno del tipo mioDato.

    Adesso, mio dato, andrà a scrivere una tabella che contiene ovviamente le stesse colonne piu una int autoincrement.
    Dopo aver eseguito l'insert, io ho bisogno di recuperare l'int della tabella fisica, e ho pensato a qualcosa tipo questo, ma non funziona:

    select valoreInt from tabella
    where colonnaChar1 = @parametroTabellaTemporanea.colonnaChar1 AND colonnaChar2 = @parametroTabellaTemporanea.colonnaChar2

    ..Ma non funziona..esiste un modo per recuperare singoli campi di una tabella user defined?
    venerdì 12 febbraio 2010 12:14

Risposte

  • Ciao,

    be.. no, puoi usare la clausola OUTPUT per memorizzare in una tabella temporanea gli id inseriti, vedi questo esempio
    --Creo la tabella di test
    CREATE TABLE dbo.Tab1
    (Id Int Identity,
     Campo1 Int)
    
    -- Creo la tabella in cui memorizzare gli id inseriti
    CREATE TABLE #tblIdInseriti
    (IdInserito Int)
    
    INSERT INTO dbo.Tab1
       OUTPUT INSERTED.ID INTO #tblIdInseriti
    SELECT 1000 UNION ALL
    SELECT 1001 UNION ALL
    SELECT 1002 UNION ALL
    SELECT 1003 UNION ALL
    SELECT 1004
    
    -- Select degli id inseriti
    SELECT * FROM #tblIdInseriti
    
    --Pulizia
    DROP TABLE dbo.Tab1,#tblIdInseriti
    
    
    /* Risultato
    IdInserito
    -----------
    1
    2
    3
    4
    5
    
    (Righe interessate: 5)
    
    */
    Ciao
    Giorgio Rancati
    lunedì 15 febbraio 2010 15:03
    Moderatore

Tutte le risposte

  • ..qualcuno puo aiutarmi?
    lunedì 15 febbraio 2010 12:02
  • Ciao,

    Se la colonna int autoincrement della tabella fisica è un int Identity, puoi recuperare l'ultimo valore inserito tramite:
    SELECT SCOPE_IDENTITY()

    Ciao
    Giorgio Rancati
    lunedì 15 febbraio 2010 12:35
    Moderatore
  • ok, intanto grazie..però la questione si complica, perche la mia stored procedur riceve tra gli altri, un parametri tvp, ne consegue che sono costretto a ciclare nel tvp stesso per inserire un record alla volta, e non l'intera tabella virtuale:

    inserisco 1 record
    recuper identity

    inserisco secondo record
    recupero altro identity

    e così via..


    ok, va bene anche così , grazie mille
    lunedì 15 febbraio 2010 13:47
  • Ciao,

    be.. no, puoi usare la clausola OUTPUT per memorizzare in una tabella temporanea gli id inseriti, vedi questo esempio
    --Creo la tabella di test
    CREATE TABLE dbo.Tab1
    (Id Int Identity,
     Campo1 Int)
    
    -- Creo la tabella in cui memorizzare gli id inseriti
    CREATE TABLE #tblIdInseriti
    (IdInserito Int)
    
    INSERT INTO dbo.Tab1
       OUTPUT INSERTED.ID INTO #tblIdInseriti
    SELECT 1000 UNION ALL
    SELECT 1001 UNION ALL
    SELECT 1002 UNION ALL
    SELECT 1003 UNION ALL
    SELECT 1004
    
    -- Select degli id inseriti
    SELECT * FROM #tblIdInseriti
    
    --Pulizia
    DROP TABLE dbo.Tab1,#tblIdInseriti
    
    
    /* Risultato
    IdInserito
    -----------
    1
    2
    3
    4
    5
    
    (Righe interessate: 5)
    
    */
    Ciao
    Giorgio Rancati
    lunedì 15 febbraio 2010 15:03
    Moderatore