sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan skriver du et attributnavn til valgforespørgslen dynamisk

Dit bord ser ud til, at det ikke er i første normal form.

I stedet for tre kolonner for Period0Id til Period2Id kunne du have en kolonne for PeriodIndex med værdierne (0,1,2) og en enkelt kolonne for PeriodId, og så ville det bare være en WHERE PeriodIndex = @Check

Du kan ikke vælge en kolonne ved hjælp af strenginterpolation med en variabel, mens du forsøger. Du kan bruge dynamisk SQL til at oprette SQL-strengen dynamisk. Eller bare hårdkode mulighederne, hvis de alle har den samme datatype.

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


  1. Brug af OR i LIKE-forespørgsel i MySQL til at sammenligne flere felter

  2. Dynamisk krydsfane i MySQL

  3. PostgreSQL Column eksisterer ikke, men det gør den faktisk

  4. Hvad svarer til bind_result på PDO