Vi har lavet en masse arbejde, der ligner dit eksempel. Vi har ikke bekymret os om SQL-injektion, til dels fordi vi har fuldstændig og total kontrol over de data, der pivoteres - der er bare ingen måde, ondsindet kode kan komme gennem ETL til vores datavarehus.
Nogle tanker og råd:
- Er du forpligtet til at pivotere med nvarcahr(500)-kolonner? Vores er varchar(25) eller numerics, og det ville være ret svært at snige skadelig kode derind.
- Hvad med datatjek? Det ser ud til, at hvis en af disse strenge indeholdt et "]"-tegn, er det enten et hackforsøg eller data, der alligevel vil sprænge i luften.
- Hvor robust er din sikkerhed? Er systemet låst, så Malorey ikke kan snige sine hacks ind i din database (enten direkte eller gennem din applikation)?
Hah. Det tog at skrive alt det for at huske funktionen QUOTENAME(). En hurtig test tyder på, at det ville virke at tilføje det til din kode på denne måde (Du får en fejl, ikke en tabt midlertidig tabel):
SELECT
@columns =
STUFF
(
(
SELECT DISTINCT
', [' + quotename(ColumnB, ']') + ']'
FROM
#PivotTest
FOR XML PATH('')
), 1, 1, ''
)
Dette burde fungere for pivot- (og unpivot) situationer, da du næsten altid skal [parentes] dine værdier.