Principale utente con più risposte
recupero singolo campo da tabella tvp

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?
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- Contrassegnato come risposta Lorenzo BenagliaModerator martedì 16 febbraio 2010 20:32
Tutte le risposte
-
-
-
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 -
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- Contrassegnato come risposta Lorenzo BenagliaModerator martedì 16 febbraio 2010 20:32