T-SQL :: Lista todas las tablas, columnas y contenido de pivote
Pregunta
Estoy usando la herramienta SSMS Data Discovery and Classification.
La herramienta busca automáticamente columnas con nombres como %address%
, %name%
, %surname%
, %e-mail%
, %tax%
, %zip%
, etc…
y sugiere de forma inteligente lo que puede ser un dato sensible.
El hecho es que fuera de las sociedades anglosajonas, el nombre de la columna no está en inglés, sino que puede estar en francés, español, italiano, etc.
Así que encontré una consulta que podría ayudarme a listar datos sensibles en función de mi idioma:
SELECT schema_name(tab.schema_id) AS schema_name
,tab.name AS table_name
,col.name AS column_name
,t.name AS data_type
,NULL as Data_Preview
FROM sys.tables AS tab
INNER JOIN sys.columns AS col ON tab.object_id = col.object_id
LEFT JOIN sys.types AS t ON col.user_type_id = t.user_type_id
ORDER BY schema_name
,table_name
,column_id;
Muy bien.
Pero sería mejor si pudiera agregar una última columna llamada Content
que PIVOT
el contenido de cada columna y SELECT TOP 5
de cada una,e imprima de forma atractiva en la última columna.
¿Me puedes ayudar a lograr eso?
Eso sería un descubrimiento y clasificación de datos DYO.
EDITAR: Puede que me haya expresado mal
Estoy ejecutando mi consulta contra AdventureWorks2019:
schemaname | tablename | columnname | datatype | Data_Preview |
---|---|---|---|---|
Person | Address | AddressID | int | NULL |
Person | Address | AddressLine1 | nvarchar | NULL |
Person | Address | AddressLine2 | nvarchar | NULL |
Person | Address | City | nvarchar | NULL |
Person | Address | StateProvinceID | int | NULL |
Person | Address | PostalCode | nvarchar | NULL |
Quiero PIVOT
el contenido de cada columna (digamos los TOP 5
) en la última columna
schemaname | tablename | columnname | datatype | Data_Preview |
---|---|---|---|---|
Person | Address | AddressID | int | 1,2,3,4,5 |
Person | Address | AddressLine1 | nvarchar | 1970 Napa Ct.,9833 Mt. Dias Blv.,7484 Roundtree Drive,9539 Glenside Dr,1226 Shoe St. |
Person | Address | AddressLine2 | nvarchar | NULL,NULL,NULL,NULL,NULL |
Person | Address | City | nvarchar | Bothell,Bothell,Bothell,Bothell,Bothell |
Person | Address | StateProvinceID | int | 79,79,79,79,79 |
Person | Address | PostalCode | nvarchar | 98011,98011,98011,98011,98011 |
Cada dato puede separarse por una coma o lo que sea. El resultado es que quiero tener una vista previa de los datos que están realmente en la columna:
Estos chicos aparentemente lograron hacerlo:
- https://learn.microsoft.com/en-us/answers/questions/285445/how-to-get-column-values-in-one-comma-separated-va.html
- https://stackoverflow.com/questions/16798930/pivot-and-comma-separated-value
- https://www.mikekale.com/rows-to-comma-separated-lists-in-sql-server/
Gracias.
davy.ai
Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.