2017-04-09 2 views
1

je stocke des données dans la table temporaire « #tempQuantity » à condition différente en utilisant la déclaration else if comme ci-dessousComment créer la même table temporaire dans l'instruction ELSE IF dans SQL Server?

IF(@GroupKey = 1) 
BEGIN 
    SELECT 
     ItemID, 
     StoreID, 
     sum(Qty) Quantity, 
     sum(ExtendedPrice) ExtendedPrice, 
     sum(ExtendedCost) ExtendedCost 
    into #tempQuantity 
    FROM 
     dbo.F_ItemDailySalesParent 

    WHERE 
     ((@DateFrom is null) or (Time>[email protected])) and ((@DateTo is null) or (Time<[email protected])) 
    GROUP BY ItemID,StoreID 
END 
ELSE IF(@GroupKey = 2) 
BEGIN 
    SELECT 
     Year(Time), 
     ItemID, 
     StoreID, 
     sum(Qty) Quantity, 
     sum(ExtendedPrice) ExtendedPrice, 
     sum(ExtendedCost) ExtendedCost 
    into #tempQuantity 
    FROM 
     dbo.F_ItemDailySalesParent 

    WHERE 
     ((@DateFrom is null) or (Time>[email protected])) and ((@DateTo is null) or (Time<[email protected])) 
    GROUP BY Year(Time),ItemID,StoreID 
END 
ELSE 
BEGIN 
    SELECT 
     Year(Time), 
     DATEPART(WEEK,Time), 
     ItemID, 
     StoreID, 
     sum(Qty) Quantity, 
     sum(ExtendedPrice) ExtendedPrice, 
     sum(ExtendedCost) ExtendedCost 
    into #tempQuantity 
    FROM 
     dbo.F_ItemDailySalesParent 

    WHERE 
     ((@DateFrom is null) or (Time>[email protected])) and ((@DateTo is null) or (Time<[email protected])) 
    GROUP BY Year(Time),DATEPART(WEEK,Time),ItemID,StoreID 
END 

Tout exécuter cette Alter stored procedure, il jette l'erreur « Il existe déjà un objet nommé « #tempQuantity » dans le base de données."

Je comprends l'erreur. Mais il ne créera pas 2 table de temp en même temps. Alors pourquoi ça jette. Alors, comment puis-je créer table temporaire comme celui-ci

Remarque

Je ne pouvais pas laisser tomber aussi, avant qu'il table de création dans le deuxième ELSE IF Déclaration

Répondre

3

Vous devez créer la table temporaire en premier.

Ensuite, utilisez INSERT..INTO dans toute instruction IF..ELSE. L'utilisation de la variable de table n'est pas une bonne idée car elle aura un problème de performance.

Pour créer table temporaire facilement, utilisez le code ci-dessous dans le début de votre script

-- check if table exists 
IF OBJECT_ID('tempdb..#tempQuantity') IS NULL 
    DROP TABLE #tempQuantity 

-- simply create the temp table using 1=2 in where clause 
SELECT 
    Year(Time), 
    ItemID, 
    StoreID, 
    sum(Qty) Quantity, 
    sum(ExtendedPrice) ExtendedPrice, 
    sum(ExtendedCost) ExtendedCost 
into #tempQuantity 
FROM 
    dbo.F_ItemDailySalesParent 
where 1=2 

Ensuite, utilisez INSERT..INTO au lieu de SELECT..INTO dans toutes vos conditions IF

0

Vous devriez essayer

IF OBJECT_ID('tempdb..#tempQuantity') IS NULL 
    SELECT * INTO #tempQuantity... 
ELSE 
    INSERT INTO #tempQuantity 

Si vous ne voulez pas de données de la table temporaire, vous pouvez Lete existantes des données de la table temporaire.

+0

s'il vous plaît lire ma question correctement. J'insère l'enregistrement dans 'if else statement', Il jette une erreur de compilation ** Il y a déjà un objet dans la base de données **. Si autre instruction exécuter l'enregistrement une seule fois, pas plusieurs fois –

+0

Je ne suis pas sûr de la façon dont sql vous a permis de créer SP en premier lieu. USE Northwind; aller CREATE PROCEDURE SP1 AS COMMENCER SELECT * INTO #TempOrders from Orders; SELECT * DANS #TempOrders à partir des commandes; FIN I Essayé au-dessus du script, SQL ne me permettant pas de créer SP. – Vidyadhar

1
  1. Vous pouvez déclarer une table locale et insérer des données par insert into ... select...

    DECLARE @TempTb AS TABLE (Id int) 
    IF(@GroupId = 1) 
    BEGIN 
    
        INSERT INTO @TempTb 
        SELECT 1 
    END 
    ELSE 
    BEGIN 
    
        INSERT INTO @TempTb 
        SELECT 1 
    END 
    
  2. Ou vous pouvez créer #temp table et insérer des données

    IF OBJECT_ID('tempdb..##temptb') IS NOT NULL 
        BEGIN 
         DROP TABLE #temptb 
        END 
    
    CREATE TABLE #temptb (Id int) 
    
    IF(@GroupId = 1) 
    BEGIN 
    
        INSERT INTO #temptb 
        SELECT 1 
    END 
    ELSE 
    BEGIN 
    
        INSERT INTO #temptb 
        SELECT 1 
    END