Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server — dynamiczna tabela przestawna — wstrzyknięcie SQL

Wykonaliśmy dużo pracy podobnej do twojego przykładu. Nie martwiliśmy się wstrzykiwaniem SQL, po części dlatego, że mamy pełną i całkowitą kontrolę nad zmienianymi danymi — po prostu nie ma możliwości, by złośliwy kod przedostał się przez ETL do naszej hurtowni danych.

Kilka przemyśleń i porad:

  • Czy wymagane jest przestawianie z kolumnami nvarcahr(500)? Nasze to varchar(25) lub numeryczne i byłoby dość trudno przemycić przez nie szkodliwy kod.
  • Co powiesz na sprawdzanie danych? Wygląda na to, że jeśli jeden z tych ciągów zawiera znak „]”, to albo próba włamania, albo dane, które i tak na ciebie wysadzą.
  • Jak solidne są Twoje zabezpieczenia? Czy system jest zablokowany tak, że Malorey nie może przemycić swoich hacków do Twojej bazy danych (bezpośrednio lub przez Twoją aplikację)?

Ha. Trzeba było napisać to wszystko, aby zapamiętać funkcję NAZWA WYCENA(). Szybki test wydaje się wskazywać, że dodanie go do kodu w ten sposób zadziała (otrzymasz błąd, a nie upuszczoną tabelę tymczasową):

SELECT
        @columns = 
        STUFF
        (
                (
                        SELECT DISTINCT
                                ', [' + quotename(ColumnB, ']') + ']'
                        FROM
                                #PivotTest
                        FOR XML PATH('')
                ), 1, 1, ''
        )

Powinno to działać w sytuacjach obrotowych (i unpivot), ponieważ prawie zawsze musisz [w nawiasach] swoje wartości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz wartości z pola XML w SQL Server 2008

  2. Paginacja w SQL Server za pomocą OFFSET/FETCH

  3. Błąd SQL Server 4104:Nie można powiązać wieloczęściowego identyfikatora.

  4. Jak wstawić rekord i zwrócić nowo utworzony identyfikator za pomocą jednego SqlCommand?

  5. Łatwy sposób wybrania odpowiedniej kolumny jako klucza podstawowego dla danej tabeli