Requête Dynaimic en SQL et comment l'implémenter en vue

entrez la description de l'image ici My Query crée dynamicment une list de compétences dans une seule ligne. Cependant, je ne peux pas utiliser cette requête en vue car il y a des variables de déclaration présentes dans la requête .Comment puis-je la modifier pour l'utiliser dans une vue et être toujours dynamic

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(col + '_' + cast(seq as varchar(2))) from ( select seq = row_number() over(partition by Skill.ID_Job order by Skill.ID_Job) from dbo.Job_Skill Skill Where Skill.Min_Job = 1 and Skill.Ideal_Job = 1 ) hr cross apply ( select 'Skill',1 ) c (col, val) order by val , seq FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = N'SELECT ID_Job, ' + @cols + N' from ( select hr.ID_Job, col = c.col + ''_'' + cast(seq as varchar(2)), c.val from ( select Skill.ID_Job, Skill.ID_SKL_Job, Skill.Min_Job, Skill.Ideal_Job, seq = row_number() over(partition by Skill.ID_Job order by Skill.ID_Job) from dbo.Job_Skill Skill Where Skill.Min_Job = 1 and Skill.Ideal_Job = 1 ) hr cross apply ( select ''Skill'', ID_SKL_Job ) c (col, val) ) x pivot ( max(val) for col in (' + @cols + N') ) p order by ID_Job' exec sp_executesql @query 

entrez la description de l'image ici

Vous n'êtes pas sûr de ce que vous essayez de faire, mais SQL ne prend pas en charge les vues dynamics.

Peut-être que l'utilisation de FOR XML et le return du résultat XML via le paramètre de sortie dans votre procédure fonctionneraient.

Ensuite, vous pouvez join le XML et l'interroger en utilisant XQuery. Si vous avez renvoyé un XML comme:

 DECLARE @xml xml = CONVERT(xml, '<jobs> <job id="1"> <skill>s1</skill> <skill>s2</skill> </job> <job id="2"> <skill>s3</skill> </job> </jobs>') You could query for certain skills like: SELECT j.* , T.jobs.query('skill') AS skill FROM @xml.nodes('jobs/job') T(jobs) INNER JOIN jobs j ON j.id = t.jobs.value('@id','int') WHERE T.jobs.exist('skill[.="s1"]') = 1 

ps d'après ce que je peux dire, l'utilisation de XML vous permettrait de scratcher SQL dynamic, car vous pouvez regrouper les compétences par job_id depuis le début, avoir une colonne comme job_id, deuxième comme XML résultant, l'implémenter dans une fonction view ou inline puis vous pouvez vous joindre à l'ID et interroger le XML sans utiliser de programmation.