it-swarm.com.de

TSQL Temp-Tabelle (oder Tabellenvariable) definieren, ohne Schema zu definieren?

Gibt es eine Möglichkeit, eine temporäre Tabelle zu definieren, ohne das Schema im Voraus zu definieren?

39
Jeff

Tatsächlich ist die Verwendung einer Tabelle VARIABLE, einer In-Memory-Tabelle, der optimale Weg. Die Tabelle #table erstellt eine Tabelle in temp db, und die Tabelle ## ist global - beide mit Festplattentreffern. Berücksichtigen Sie die Verlangsamung/den Erfolg bei der Anzahl der Transaktionen.

CREATE PROCEDURE [dbo].[GetAccounts] 
    @AccountID BIGINT,
    @Result INT OUT,
    @ErrorMessage VARCHAR(255) OUT
AS
BEGIN
    SET NOCOUNT ON;
    SET @Result = 0
    SET @ErrorMessage = ''

    DECLARE @tmp_Accounts TABLE (
                                                AccountId BIGINT,
AccountName VARCHAR(50),
...
)

INSERT INTO @tmp_Accounts ([AccountId], [AccountName]...
)
SELECT AccountID, AccountName
FROM Accounts
WHERE  ...


    IF @@Rowcount = 0
        BEGIN
            SET @ErrorMessage = 'No accounts found.'
            SET @Result = 0

            RETURN @Result
        END
    ELSE
        BEGIN
            SET @Result = 1

            SELECT *
            FROM @tmp_Accounts
        END 

Beachten Sie, wie Sie in diese temporäre Tabelle einfügen.

Der Nachteil dabei ist, dass das Schreiben möglicherweise etwas länger dauert, da Sie Ihre Tabellenvariable definieren müssen.

Ich würde auch SQL Prompt for Query Analyzer von RedGate empfehlen.

40
ElHaix

sie brauchen keine offenen Fragen. Setzen Sie einfach "INTO #AnyTableName" zwischen die Auswahlliste und das FROM einer Abfrage ...

SELECT *
    INTO #Temp1
    FROM table1
    WHERE x=y
29
KM.

Ja, Sie können es mit erstellen

SELECT INTO ...

Sagen wir

SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )
10
boj