
数据库实际已经更新为80,但再次比对还是第一次加载出来的长度?哪里设置有问题吗?
考虑到其他数字类型的长度,修改成以下:日期类型遇到后再测试!
SELECT
col.owner AS schema_name,
col.table_name AS tbl_def_key,
col.column_id AS order_value,
col.column_name AS def_key,
clc.comments AS def_name,
'' AS intro,
col.data_type AS db_data_type,
nvl(col.DATA_PRECISION,col.CHAR_LENGTH) AS data_len,
col.data_scale AS num_scale,
decode(col.nullable,'Y',0,1) AS not_null,
CASE WHEN cc.constraint_name IS NOT NULL THEN 1 ELSE 0 END AS primary_key,
'' AS auto_increment,
col.data_default AS default_value
FROM
all_tab_columns col LEFT JOIN all_col_comments clc ON col.OWNER = clc.OWNER AND col.table_name = clc.table_name AND col.column_name = clc.column_name
LEFT JOIN (all_cons_columns cc JOIN all_constraints cs ON cc.constraint_name = cs.constraint_name AND cc.owner = cs.owner and cs.constraint_type = 'P') on col.owner=cc.owner and col.table_name=cc.table_name and col.column_name = cc.column_name
WHERE
col.owner in (:schemaName)
AND CONCAT(CONCAT(col.owner, '.') , col.table_name) in (:sysTableNames)
ORDER BY
col.owner ASC, col.table_name ASC,col.column_id ASC
是元数据查询的模板有问题,你可以手动修改下改模板内容(根据当前你的数据是oracle还是sqlserver来决定用哪个模板):
1.oracle数据库

1.1.找到查询表字段的模板

1.2.用下面的内容将模板替换掉
SELECT
col.owner AS schema_name,
col.table_name AS tbl_def_key,
col.column_id AS order_value,
col.column_name AS def_key,
clc.comments AS def_name,
'' AS intro,
col.data_type AS db_data_type,
CASE DATA_TYPE
WHEN 'NUMBER' THEN DATA_PRECISION
WHEN 'BINARY_DOUBLE' THEN DATA_LENGTH
ELSE CHAR_LENGTH
END AS data_len,
col.data_scale AS num_scale,
decode(col.nullable,'Y',0,1) AS not_null,
CASE WHEN cc.constraint_name IS NOT NULL THEN 1 ELSE 0 END AS primary_key,
'' AS auto_increment,
col.data_default AS default_value
FROM
all_tab_columns col LEFT JOIN all_col_comments clc ON col.OWNER = clc.OWNER AND col.table_name = clc.table_name AND col.column_name = clc.column_name
LEFT JOIN (all_cons_columns cc JOIN all_constraints cs ON cc.constraint_name = cs.constraint_name AND cc.owner = cs.owner and cs.constraint_type = 'P') on col.owner=cc.owner and col.table_name=cc.table_name and col.column_name = cc.column_name
WHERE
col.owner in (:schemaName)
AND CONCAT(CONCAT(col.owner, '.') , col.table_name) in (:sysTableNames)
ORDER BY
col.owner ASC, col.table_name ASC,col.column_id ASC
2.sqlServer数据库

2.1.用下面的内容将模板替换掉
SELECT
schema_name = sch.name,
tbl_def_key = tab.name,
order_value = col.column_id,
def_key = col.name,
def_name = ep.value,
intro = '',
db_data_type = t.name,
data_len = IIF(col.max_length = 0, NULL,
IIF(t.name IN ('nvarchar', 'nchar'), col.max_length / 2, col.max_length)),
num_scale = IIF(col.scale = 0, null, col.scale),
primary_key = ISNULL((
SELECT TOP 1 1
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
WHERE i.object_id = tab.object_id
AND ic.column_id = col.column_id
AND i.is_primary_key = 1
),0),
not_null= IIF(col.is_nullable = 1, 0, 1),
auto_increment = is_identity,
default_value = ISNULL(REPLACE(REPLACE(dc.definition,'(',''), ')',''),'') -- ISNULL(dc.definition, '')
FROM
sys.schemas sch
INNER JOIN sys.tables tab
ON sch.schema_id = tab.schema_id
INNER JOIN sys.columns col
ON tab.object_id = col.object_id
LEFT JOIN sys.extended_properties ep
ON tab.object_id = ep.major_id
AND col.column_id = ep.minor_id
AND ep.name = 'MS_Description'
AND ep.class = 1
LEFT JOIN sys.types t ON col.system_type_id = t.system_type_id AND col.user_type_id = t.user_type_id
LEFT JOIN sys.default_constraints dc ON dc.object_id = col.default_object_id
where sch.name IN (:schemaName) AND sch.name + '.' + tab.name IN (:sysTableNames)
ORDER BY sch.name,tbl_def_key, order_value