2012-03-23 11 views
17

Apparentemente, non posso usarli. Ricevo un messaggio di errore del tipo:È possibile avere tabelle temporanee in una funzione?

uso non valido di un operatore di side-effettuando 'SELECT' all'interno di una funzione

Se voglio fare qualcosa di simile:

select bleh 
    into #temp 
    from Blah 

... all'interno di una funzione.

+2

È possibile utilizzare invece una variabile di tabella. –

risposta

25

No, per this thread where the same question was asked, non si può, ma è possibile utilizzare un table variable

DECLARE @MyTempTableVariable TABLE (SCHEMA) 

INSERT INTO @MyTempTableVariable 
SELECT bleh 
FROM bleh 
+0

Errore di cardinalità è la ragione principale per cui vorremmo sostituire la variabile di tabella con la tabella temporanea in una funzione di DB di SQL. Tuttavia, esiste un rimedio per questo problema, come descritto in dettaglio qui: http: //blogs.msdn.com/b/blogdoezequiel/archive/2012/12/01/table-variables-and-row-estimations.aspx#.VGC5oMnm7HS L'aggiunta di OPTION (RECOMPILE) all'istruzione in cui viene utilizzata la variabile di tabella può migliorare le prestazioni. – Vladislav

1

È anche possibile farlo con un CTE. Vedi il browser dei modelli in SSMS. IntelliSense confonde il problema e mostrerà un errore fino a quando non si completa il CTE e il seguente inserimento/selezione, ma funzionerà.

+0

Questo dovrebbe essere un commento, piuttosto che una risposta. –

+0

@MohammadAkbari: non sono d'accordo. Aggiunge un'alternativa molto valida all'altra risposta. – davidhigh

+2

@Lew Wolf: un esempio o una parte di codice sarebbe buona, comunque. – davidhigh

Problemi correlati