2012-03-23 29 views
17

Anscheinend kann ich sie nicht benutzen. Ich erhalte eine Fehlermeldung wie:Ist es möglich, temporäre Tabellen in einer Funktion zu haben?

Ungültige Verwendung eines Seiten bewirken Operator ‚SELECT‘ innerhalb einer Funktion

Wenn ich so etwas wie dies tun wollen:

select bleh 
    into #temp 
    from Blah 

... innerhalb einer Funktion.

+2

Sie könnten stattdessen eine Tabellenvariable verwenden. –

Antwort

25

Nein, pro this thread where the same question was asked, können Sie nicht, aber Sie können einen table variable

DECLARE @MyTempTableVariable TABLE (SCHEMA) 

INSERT INTO @MyTempTableVariable 
SELECT bleh 
FROM bleh 
+0

Kardinalitätsfehler ist der Hauptgrund, warum wir Tabellenvariable durch temporäre Tabelle in einer SQL DB-Funktion ersetzen möchten. Es gibt jedoch eine Problemumgehung für dieses Problem, die hier ausführlich beschrieben wird: http: //blogs.msdn.com/b/blogdoezequiel/archive/2012/12/01/table-variables-and-row-estimations.aspx#.VGC5oMnm7HS Das Hinzufügen von OPTION (RECOMPILE) zu der Anweisung, in der die Tabellenvariable verwendet wird, kann die Leistung verbessern. – Vladislav

1

Sie können sie auch mit einem WAK tun verwenden. Siehe den Vorlagenbrowser in SSMS. IntelliSense verwirrt das Problem und zeigt einen Fehler an, bis Sie das CTE und das folgende Einfüge/Auswählen abgeschlossen haben, aber es wird funktionieren.

+0

Das sollte eher ein Kommentar als eine Antwort sein. –

+0

@MohammadAkbari: Ich stimme nicht zu. Es fügt eine sehr gültige Alternative zu der anderen Antwort hinzu. – davidhigh

+2

@Lew Wolf: ein Beispiel oder ein Stück Code wäre aber gut. – davidhigh

Verwandte Themen