39 votes

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?

39voto

ElHaix Points 4261

En fait à l'aide d'une VARIABLE de table, une table en mémoire, est la meilleure façon d'aller. La #table pour créer une table dans la bdd temp, et ##table est globale - à la fois avec disque hits. Envisager le ralentissement/hit connu 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 manière dont vous insérez dans ce temp la table.

Le bas-côté de cela est que cela peut prendre un peu plus de temps pour écrire, comme vous devez définir votre table variable.

Je recommande aussi Invite SQL pour l'Analyseur de Requêtes par RedGate.

29voto

KM. Points 51800

vous n'avez pas besoin d'OPENQUERY. Il suffit de mettre "INTO #AnyTableName" entre la liste de sélection et le FROM de toute requête ...

 SELECT *
    INTO #Temp1
    FROM table1
    WHERE x=y
 

10voto

boj Points 5284

Oui, vous pouvez le créer avec

 SELECT INTO ...
 

Disons

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X