0

J'ai une requête dynamique comme indiqué ci-dessous. Le paramètre @ColumnNames possède plusieurs colonnes que ce pivot utilise. @ID et @Apartment_ID proviennent de paramètres d'insertion.INSERT INTO table temporaire à partir du nombre inconnu et du nom des colonnes (à partir de la requête PIVOT dynamique)

SET @DynamicSQL = 'select id, name, address, phone, remarks, ' + **@ColumnNames** + ' 
        from (select b.id, name, criteria_id, impact_value, remarks 
          from dbo.User u 
          inner join dbo.ID b on b.id = u.id 
          where b.Instance_ID = '+ **@Id** + 
          'and ownerID in (select * from fnSplitString(''' + **@Apartment_ID** + + ''',' + ''','''  + '))'    
       + ') as t 
       pivot (max(impact_value) for criteria_id in (' + **@ColumnNames**+') 
      ) pivoted ' 

Exec sp_executesql @DynamicSQL 

obtiendra un résultat comme indiqué dans la capture d'écran. Les colonnes (91, 92, ..) ne sont pas fixes qui obtiennent de @ColumnNames:

image description here

Je veux insérer ce résultat dynamique mis en table temporaire pour faire fonctionner les sortes.

Declare @SQLstrs nvarchar(max) 

IF OBJECT_ID('tempdb..#tempResult') IS NOT NULL 
    DROP TABLE #tempResult 

CREATE TABLE #tempResult 
( 
    id int, 
    name nvarchar(max), 
    address nvarchar(max), 
    phone nvarchar(max), 
    Remarks nvarchar(max), 
    **@ColumnNames** 
) 

--EXEC (@Alter_sql); 

SET @SQLstrs = 'Insert into #tempResult ' + @DynamicSQL 

EXEC @SQLstrs 

Comme table temporaire doivent inclure les colonnes fixes, comment puis-je mettre en place les colonnes dynamiques qui ne peuvent pas savoir combien de colonnes seront insérer?

+1

Qu'est-ce que cela veut dire - * « Je veux insérer ce résultat dynamique mis en table temporaire pour faire fonctionner de toutes sortes. » *? Cela ressemble beaucoup à [un problème xy] (https://meta.stackexchange.com/q/66377/179361) pour moi. – GarethD

+0

Que comptez-vous faire exactement avec la table '# tempResult'? –

+0

Je veux faire l'ordre par le nom de la table temporaire parce que je l'ai essayé avant d'insérer l'ordre par la déclaration dans le @DynamicSQL ne fonctionnait pas. C'est pourquoi, d'abord mettre les données dynamiques dans la table temporaire sans tri. Puis faire le tri avec la table temporaire –

Répondre

1

essayer d'utiliser select into

SET @SQLstrs = 'select * into #tempResult from(' + @DynamicSQL +') as _temp' 
+0

comment est-ce que je peux mentionné au sujet du nom de colonnes avant? –

+0

vous n'avez pas besoin de créer la table #tempResult avant, "select into" créera automatiquement la table – prance

+0

Merci. mais j'essaye d'utiliser cette requête mais quand exec les @SQLstrs, n'a pas montré la table de résultat. en tant que débutant, je vous suggère comment dois-je faire? Merci beaucoup. –