J'ai une table (non conçue par moi) qui a 20 colonnes nommées de manière variable. Autrement dit, selon le type d'enregistrement que vous consultez, le nom applicable de la colonne peut changer.
Les noms de colonnes possibles sont stockés dans une autre table, que je peux interroger très facilement.
Par conséquent, la requête que je recherche vraiment ressemble à ceci:
SELECT Col1 AS (SELECT ColName FROM Names WHERE ColNum = 1 and Type = @Type),
Col2 AS (SELECT ColName FROM Names WHERE ColNum = 2 and Type = @Type)
FROM Tbl1
WHERE Type = @Type
Évidemment, cela ne fonctionne pas, alors comment obtenir un résultat similaire?
'
J'ai essayé de construire une chaîne de requête et de l'
Il s'avère que j'utilisais une requête incorrecte pour construire le SQL dynamique et en tant que tel, j'ai construit une chaîne vide. SQL Server a définitivement exécuté correctement la chaîne vide.EXECUTE
intégrer, mais cela ne fait que retourner "Commande (s) terminée avec succès" et ne semble pas retourner un ensemble de lignes.
Notez que la raison pour laquelle j'ai besoin que cela se produise, plutôt que de simplement coder en dur les noms de colonne, est que les noms de colonne sont configurables par l'utilisateur.
la source
Réponses:
Essayez le code suivant:
Cela renvoie l'instruction SELECT:
SELECT CONVERT(INT, Col1) AS [AccountID],CONVERT(VARCHAR(50), Col2) AS [AccountName],CONVERT(DATE, Col3) AS [AccountOpenDate] FROM #Data WHERE [Type] = 'Account'
la source
Cela semble primordial pour une solution d'affichage frontal. La requête 1 retirerait vos données, la requête 2 retirerait les noms de colonne et le code lorsque vous créez la structure que vous utilisez pour afficher, vous définissez les en-têtes de la deuxième requête.
Bien qu'une méthode SQL pure soit possible, elle sera du SQL dynamique et la maintenance du code serait un cauchemar.
Aussi, vous recherchez probablement
sp_executesql
et pas seulementEXECUTE N'Query String'
car cela peut résoudre votre problème de commande terminée avec succès.la source