Question

Est-il possible de définir une table temporaire sans le définir est le schéma à l'avant?

Était-ce utile?

La solution

En fait, en utilisant une variable de table, une table en mémoire, est la meilleure façon d'aller. Le #table crée une table temporaire db et ## table est globale - à la fois avec des hits de disque. Considérons 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 façon dont vous insérez dans ce tableau temp.

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

Je vous recommande également SQL Prompt pour Analyseur de requêtes par Redgate.

Autres conseils

vous n'avez pas besoin OPENQUERY. Il suffit de mettre « dans #AnyTableName » entre la liste de sélection et la requête de toute ...

SELECT *
    INTO #Temp1
    FROM table1
    WHERE x=y

Oui, vous pouvez créer avec

SELECT INTO ...

Disons que

SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top