Chúng tôi đã làm rất nhiều công việc tương tự như ví dụ của bạn. Chúng tôi không lo lắng về việc xâm nhập SQL, một phần vì chúng tôi có toàn quyền kiểm soát đối với dữ liệu được xoay - không có cách nào để mã độc có thể thông qua ETL vào kho dữ liệu của chúng tôi.
Vài suy nghĩ và lời khuyên:
- Bạn có bắt buộc phải xoay với các cột nvarcahr (500) không? Của chúng tôi là varchar (25) hoặc số và sẽ khá khó để lén đưa mã gây hại vào đó.
- Còn về việc kiểm tra dữ liệu thì sao? Có vẻ như nếu một trong các chuỗi đó chứa ký tự "]" thì đó là một nỗ lực hack hoặc dữ liệu sẽ làm bạn bị nổ tung.
- Mức độ bảo mật của bạn mạnh mẽ như thế nào? Hệ thống bị khóa có khiến Malorey không thể đột nhập vào cơ sở dữ liệu của bạn (trực tiếp hoặc thông qua ứng dụng của bạn) không?
Hả. Phải mất công viết tất cả những điều đó để nhớ hàm QUOTENAME (). Một thử nghiệm nhanh dường như chỉ ra rằng việc thêm nó vào mã của bạn như vậy sẽ hoạt động (Bạn sẽ gặp lỗi, không phải bảng tạm thời bị rớt):
SELECT
@columns =
STUFF
(
(
SELECT DISTINCT
', [' + quotename(ColumnB, ']') + ']'
FROM
#PivotTest
FOR XML PATH('')
), 1, 1, ''
)
Điều này sẽ hoạt động đối với các tình huống xoay vòng (và bỏ chia sẻ), vì bạn hầu như luôn phải [ngoặc] các giá trị của mình.