【发布时间】:2021-12-28 13:40:33
【问题描述】:
我正在使用 SSMS 工具 Data Discovery and Classification。
该工具会自动搜索列名称,如%address%、%name%、%surname%、%e-mail%、%tax%、%zip% 等...
并且很好地向您建议它可能是一个明智的数据。
事实上,在盎格鲁-撒克逊社会之外,列名不是英文的,但可以是法文、西班牙文、意大利文等。
所以我找到了一个查询,可以帮助我根据我的语言列出合理的数据:
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;
非常好。
但如果我可以添加一个名为 Content 的最后一列会更好
你能帮我存档吗?
这将是一个 DYO 数据发现和分类。
编辑:我可能表达得很糟糕。
我正在针对 AdventureWorks2019 运行 mz 查询:
| schema_name | table_name | column_name | data_type | 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 |
我想PIVOT 每一列的内容(比如说TOP 5)到最后一列
| schema_name | table_name | column_name | data_type | 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 |
每个数据可以用逗号或其他分隔。结果是我想预览列中实际存在的数据:
这家伙显然是来存档的:
- https://docs.microsoft.com/en-us/answers/questions/285445/how-to-get-column-values-in-one-comma-separated-va.html
- Pivot and comma Separated value
- https://www.mikekale.com/rows-to-comma-separated-lists-in-sql-server/
谢谢
【问题讨论】:
-
如果您可以提供一个包含几行示例数据的示例表以及基于您的示例数据的所需输出,那么这里真正有帮助的地方。
-
嗨@SeanLange,我更新了我的问题。谢谢
-
您将不得不为此使用动态 sql。我没有仔细查看 Nav 发布的解决方案,但这似乎是您所需要的。
-
仅供参考,该工具正在寻找敏感数据,而不是敏感数据。如果您的数据库中的数据是合理的,我怀疑该工具是否有任何想法。检测敏感数据(或者可能是非敏感数据)的工具可能会检查您的列是否具有正确的数据类型,例如将电话号码存储在
varchar中或将日期存储在int中;两者都不明智。 -
另外,赏金描述是错误的,
STUFF除了将字符串的一部分替换为另一部分之外,没有做任何事情。 “魔术”由FOR XML PATH完成;所有STUFF在此类解决方案中所做的就是删除第一个分隔符。
标签: sql-server tsql pivot classification pivot-table