SSRS: Modifier l'Instruction SQL de manière dynamique
J'ai un rapport de SSRS 2005, qui est basée sur une requête similaire à celui-ci:
SELECT * FROM MyTable (NOLOCK)
WHERE col1 = 'ABC'
AND col2 LIKE '%XYZ%'
J'ai besoin d'être en mesure d'inclure de manière dynamique ET la partie de la clause where dans la requête sur la base de savoir si l'utilisateur a coché une case à cocher. Fondamentalement, c'est une instruction SQL dynamique et c'est ça le problème. J'ai essayé plusieurs méthodes sans succès. Est-ce possible? Ne SSRS 2005 prend en charge SQL dynamique? Merci!
OriginalL'auteur | 2008-09-26
Vous devez vous connecter pour publier un commentaire.
Charles a presque eu la bonne réponse.
Il devrait être:
C'est un classique "pattern" dans SQL conditionnelle des prédicats. Si
@checked = 0
, puis ce sera le retour de toutes les lignes correspondant le reste du prédicat (col1 = 'ABC'
). SQL Server n'a même pas de processus de la seconde moitié duOR
.Si
@checked = 1
puis elle permettra d'évaluer la deuxième partie de laOR
et retourner les lignes correspondant àcol1 = 'ABC' AND col2 LIKE '%XYZ%'
Si vous avez plusieurs conditionnelle prédicats ils peuvent être enchaînés les uns aux autres à l'aide de cette méthode (alors que le SI et le CAS des méthodes deviendrait rapidement ingérable).
Par exemple:
Ne pas utiliser le SQL dynamique, ne pas utiliser de SI ou CAS.
Yep, je ne peux pas respecter le code SQL dynamique, incroyablement difficile à déboguer, de maintenir ou de mise à niveau. Quelques petites améliorations de performances si vous avez un grand nombre de paramètres optionnels, mais même avec un maximum de 30 paramètres j'ai eu de bonnes performances sans avoir recours à elle.
Pour ne pas mentionner combien il est dangereux, en matière de sécurité PoV
Excellente solution. Je vous remercie.
Génial. C'est une bien meilleure alternative que la direction la plus solutions vous (sql dynamique)
OriginalL'auteur Brannon
Comment à ce sujet. @vérifié, c'est votre peu variable.
Edit: Aussi, si vous n'êtes pas à l'aide d'une procédure stockée, puis d'en utiliser un.
Votre réponse est grand, mais dans le cas où l'on ne peut pas s'exécuter sur la source de données et nous avons accès en lecture seule aux données de la strored procédure d'approche ne fonctionnera pas.
OriginalL'auteur Charles Graham
Peut-être que ce serait travailler pour vous:
Je suis désolé de ne pas utiliser SSRS beaucoup, mais si vous pouvez obtenir la valeur de la case à cocher dans le @vérifié paramètre cela devrait fonctionner.
Alternativement, vous pouvez utiliser une instruction.
OriginalL'auteur Jason Stevenson
OriginalL'auteur Leon Tayson
Ce serait de travailler dans SSRS 2000, mais utilisé comme un dernier recours.
(mauvais) PSEUDOCODE
Découvrez L'exécution de "Dynamique" des Requêtes SQL. du Routard de SQL Server 2000 Reporting Services
OriginalL'auteur jason saldo
Une façon de le faire est par la génération de la SSR requête comme une expression. Dans les OFFRES concepteur de rapports, définissez votre requête:
OriginalL'auteur
si vous pouvez utiliser des procédures stockées, c'est probablement plus facile de le faire. passer dans votre params. Créer une Chaîne SQL basé sur vos conditions et de faire un EXEC de la chaîne sql, votre procédure stockée renvoie les résultats dont vous avez besoin.
OriginalL'auteur ScaleOvenStove
Vous pouvez également prendre une autre approche et d'utiliser la fonction Exec:
Notez l'utilisation de deux apostrophes
'
pour marquer le texte cité.OriginalL'auteur Anthony K