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
:
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?
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
Que comptez-vous faire exactement avec la table '# tempResult'? –
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 –