web-dev-qa-db-fra.com

TSQL Define Temp Table (ou variable de table) sans définir de schéma?

Existe-t-il un moyen de définir une table temporaire sans définir son schéma à l'avance?

39
Jeff

En fait, utiliser une table VARIABLE, une table en mémoire, est la meilleure façon de procéder. La #table crée une table dans temp db, et la table ## est globale - les deux avec des hits de disque. Considérez le ralentissement/hit rencontré avec le nombre de transactions.

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 

Notez la façon dont vous insérez dans cette table temporaire.

L'inconvénient est que l'écriture peut prendre un peu plus de temps, car vous devez définir votre variable de table.

Je recommanderais également SQL Prompt for Query Analyzer by RedGate.

40
ElHaix

vous n'avez pas besoin d'OPENQUERY. Mettez simplement "INTO #AnyTableName" entre la liste de sélection et le FROM de n'importe quelle requête ...

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

Oui, vous pouvez le créer avec

SELECT INTO ...

Disons

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