J'ai une requête qui utilise un curseur pour parcourir les résultats d'une instruction select.SQL dynamique conditionnel avec curseur
L'instruction select en bref sélectionne tous les enregistrements d'une table de mappage que j'ai. L'une des colonnes est 'SourceTableName'. J'utilise ce champ pour générer du SQL dynamique.
Je cherche à ajouter un paramètre à ma procédure stockée, qui me permettra de créer uniquement du SQL dynamique pour le 'SourceTableName' que je veux - SI je passe dans un 'SourceTableNameFilter'. Je suis coincé avec une logique qui enveloppe mon SQL dynamique.
IF @SourceTableNameFilter (paramètre SP) = @SourceTableName (à partir du tableau de correspondance) BEGIN
Générez et exécuter une SQL dynamique basée sur la SourceTableName. Le problème est, je veux que cela fonctionne sur toutes les tables qui reviennent d'un select contre 'SourceTableName' MAIS si un paramètre @SourceTableNameFilter est présent et non null - alors seulement génèrent le SQL dynamique pour toutes les lignes dans le curseur qui correspondent à mon paramètre de filtre.
Y a-t-il un moyen pour moi d'accomplir ceci avec une instruction IF sans copier la logique à l'intérieur du IF/ELSE deux fois?
FETCH NEXT FROM TABLECUR INTO @SourceTableName
,@SourceInColumn
,@SourceOutColumn
,@TargetTableName
,@TargetLookupColumn
,@TargetLookupResultColumn
,@MappingTableID
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
IF (@SourceTableName = @SourceTableNameFilter)
--GENERATE DYNAMIC SQL
ELSE
--GENERATE DYNAMIC SQL FOR ALL RECORDS
Générer chaîne SQL dynamique est la même dans les deux cas et l'autre, une façon de changer les conditions pour que je ne suis pas double emploi avec la génération SQL dynamique et de ne pas générer SQL dynamique lorsque le @SourceTableName ! = @SourceTableNameFilter?
Merci
Brillant. Merci beaucoup!! – user53885