如何从视图中解密列名?

XMe*_*i01 4 sql-server datatypes view system-tables

我必须处理第三方数据库,我试图获取视图中使用的所有列,但我对它们进行了加密,
例如:而不是获取intNUMERO_SALARIE知道TNumSal为什么?

DECLARE @TableViewName NVARCHAR(128)
SET @TableViewName=N'DP_SALARIE'
SELECT b.name AS ColumnName, c.name AS DataType, b.max_length AS Length
FROM sys.all_objects a
INNER JOIN sys.all_columns b
ON a.object_id=b.object_id
INNER JOIN sys.types c
ON b.user_type_id=c.user_type_id
WHERE a.Name=@TableViewName
AND a.type IN ('U','V')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有什么办法可以解密它们吗?

st1*_*100 7

对我来说看起来像是用户定义的数据类型。

通过查看sys.types和连接列system_type_id并进一步定义system_type_id应该等于user_type_id查询应该为您提供底层系统类型名称。

所以你的代码应该是这样的

DECLARE @TableViewName NVARCHAR(128)
SET @TableViewName=N'DP_SALARIE'
SELECT b.name AS ColumnName, c.name AS DataType, b.max_length AS Length
FROM sys.all_objects a
INNER JOIN sys.all_columns b
ON a.object_id=b.object_id
INNER JOIN sys.types c
ON b.system_type_id=c.system_type_id
WHERE a.Name=@TableViewName
AND a.type IN ('U','V')
AND c.system_type_id = c.user_type_id
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,现在 `NUMERO_SALARIE` 是 int 而不是 TNumSal (2认同)