Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment écrire dynamiquement un nom d'attribut dans la requête de sélection

Votre table semble ne pas être dans sa première forme normale.

Au lieu de trois colonnes pour Period0Id à Period2Id, vous pourriez avoir une colonne pour PeriodIndex avec des valeurs de (0,1,2) et une seule colonne pour PeriodId, puis ce serait juste un WHERE PeriodIndex = @Check

Vous ne pouvez pas sélectionner une colonne en utilisant l'interpolation de chaîne avec une variable pendant que vous essayez. Vous pouvez utiliser SQL dynamique pour créer dynamiquement la chaîne SQL. Ou simplement coder en dur les options si elles ont toutes le même type de données.

Select ID, 
       Name, 
       StatusId = CASE @Check WHEN 0 THEN Period0Id
                              WHEN 1 THEN Period1Id
                              WHEN 2 THEN Period2Id
                   END
From mytable