Kami telah melakukan banyak pekerjaan yang mirip dengan contoh Anda. Kami tidak khawatir tentang perintah SQL, sebagian karena kami memiliki kontrol penuh dan total atas data yang diputar--tidak mungkin kode berbahaya dapat menembus ETL ke gudang data kami.
Beberapa pemikiran dan saran:
- Apakah Anda perlu melakukan pivot dengan kolom nvarcahr(500)? Kami adalah varchar(25) atau numerik, dan akan sangat sulit untuk menyelundupkan kode yang merusak melalui sana.
- Bagaimana dengan pengecekan data? Sepertinya jika salah satu string tersebut berisi karakter "]", itu bisa jadi merupakan upaya peretasan atau data yang akan meledakkan Anda.
- Seberapa kuat keamanan Anda? Apakah sistem dikunci sedemikian rupa sehingga Malorey tidak dapat menyelinapkan peretasannya ke dalam basis data Anda (baik secara langsung atau melalui aplikasi Anda)?
Hah. Butuh menulis semua itu untuk mengingat fungsi QUOTENAME(). Tes cepat tampaknya menunjukkan bahwa menambahkannya ke kode Anda seperti itu akan berhasil (Anda akan mendapatkan kesalahan, bukan tabel temp yang dijatuhkan):
SELECT
@columns =
STUFF
(
(
SELECT DISTINCT
', [' + quotename(ColumnB, ']') + ']'
FROM
#PivotTest
FOR XML PATH('')
), 1, 1, ''
)
Ini akan bekerja untuk situasi pivot (dan unpivot), karena Anda hampir selalu harus [mengikat] nilai Anda.