人大金仓多个schema中存在同名表,并且表结构不一致,会导致数据类型错乱 返回

SELECT
schemaname,
CAST ( pclass.OID AS INT4 ) AS TableId,
CAST ( ptables.tablename AS VARCHAR ) AS TableName,
pcolumn.COLUMN_NAME AS DbColumnName,
pcolumn.udt_name AS DataType,
pcolumn.character_maximum_length AS LENGTH,
pcolumn.column_default AS DefaultValue,
col_description ( pclass.OID, pcolumn.ordinal_position ) AS ColumnDescription,
CASE
WHEN pkey.colname = pcolumn.COLUMN_NAME THEN
TRUE ELSE FALSE
END AS IsPrimaryKey,
CASE
WHEN UPPER ( pcolumn.column_default ) LIKE'NEXTVAL%' THEN
TRUE ELSE FALSE
END AS IsIdentity,
CASE
WHEN UPPER ( pcolumn.is_nullable ) = 'YES' THEN
TRUE ELSE FALSE
END AS IsNullable
FROM
( SELECT * FROM sys_tables WHERE UPPER ( tablename ) = UPPER ( 'tb_base_eq_archives' ) AND LOWER ( schemaname ) = 'erp_base' ) ptables
INNER JOIN sys_class pclass ON ptables.tablename = pclass.relname AND relnamespace = ( SELECT OID FROM pg_namespace WHERE nspname = 'erp_base' )
INNER JOIN ( SELECT * FROM information_schema.COLUMNS WHERE table_schema = 'erp_base' ) pcolumn ON pcolumn.TABLE_NAME = ptables.tablename
LEFT JOIN (
SELECT
sys_class.relname,
sys_attribute.attname AS colname
FROM
sys_constraint
INNER JOIN sys_class ON sys_constraint.conrelid = sys_class.OID AND sys_class.relnamespace = ( SELECT OID FROM pg_namespace WHERE nspname = 'erp_base' )
INNER JOIN sys_attribute ON sys_attribute.attrelid = sys_class.OID
AND sys_attribute.attnum = sys_constraint.conkey [ 1 ]
INNER JOIN sys_type ON sys_type.OID = sys_attribute.atttypid
WHERE
sys_constraint.contype = 'p'
) pkey ON pcolumn.TABLE_NAME = pkey.relname
ORDER BY
ptables.tablename,
pcolumn.COLUMN_NAME
热忱回答(6)
-
fate sta VIP0
2024/8/26金仓哪个模式
0 回复 -
destiny_lv VIP0
2024/8/26mysql与oracle都有这个问题,发现的就是这个地方取值有问题,没有指定schema来取值,调整后的sql已经放在上面了,这个sql在数据库里面查询就是正常的
0 回复 -
fate sta VIP0
2024/8/26正确的文本发一下我这边改一下
0 回复 -
destiny_lv VIP0
2024/8/26protected override string GetColumnInfosByTableNameSql { get { string sql = $@" SELECT CAST ( pclass.OID AS INT4 ) AS TableId, CAST ( ptables.tablename AS VARCHAR ) AS TableName, pcolumn.COLUMN_NAME AS DbColumnName, pcolumn.udt_name AS DataType, pcolumn.character_maximum_length AS LENGTH, pcolumn.column_default AS DefaultValue, col_description ( pclass.OID, pcolumn.ordinal_position ) AS ColumnDescription, CASE WHEN pkey.colname = pcolumn.COLUMN_NAME THEN TRUE ELSE FALSE END AS IsPrimaryKey, CASE WHEN UPPER ( pcolumn.column_default ) LIKE'NEXTVAL%' THEN TRUE ELSE FALSE END AS IsIdentity, CASE WHEN UPPER ( pcolumn.is_nullable ) = 'YES' THEN TRUE ELSE FALSE END AS IsNullable FROM ( SELECT * FROM sys_tables WHERE UPPER ( tablename ) = UPPER ( '{{0}}' ) AND LOWER ( schemaname ) = '{GetSchema()}' ) ptables INNER JOIN sys_class pclass ON ptables.tablename = pclass.relname AND relnamespace = ( SELECT OID FROM pg_namespace WHERE nspname = '{GetSchema()}' ) INNER JOIN ( SELECT * FROM information_schema.COLUMNS WHERE table_schema = '{GetSchema()}' ) pcolumn ON pcolumn.TABLE_NAME = ptables.tablename LEFT JOIN ( SELECT sys_class.relname, sys_attribute.attname AS colname FROM sys_constraint INNER JOIN sys_class ON sys_constraint.conrelid = sys_class.OID AND sys_class.relnamespace = ( SELECT OID FROM pg_namespace WHERE nspname = '{GetSchema()}' ) INNER JOIN sys_attribute ON sys_attribute.attrelid = sys_class.OID AND sys_attribute.attnum = sys_constraint.conkey [ 1 ] INNER JOIN sys_type ON sys_type.OID = sys_attribute.atttypid WHERE sys_constraint.contype = 'p' ) pkey ON pcolumn.TABLE_NAME = pkey.relname ORDER BY ptables.tablename"; if (IsPgModel()) { sql = sql.Replace("sys_", "pg_"); } else if (IsSqlServerModel()) { sql = sql.Replace("sys_", "pg_"); sql = sql.Replace("pg_constraint.conkey[1]", "pg_constraint.conkey{{1}}"); sql = sql.Replace("UPPER(", "pg_catalog.upper("); sql = sql.Replace("lower(", "pg_catalog.lower("); sql = sql.Replace("NEXTVAL%", "%nextval%"); sql = sql.Replace("pcolumn.udt_name", "pcolumn.data_type"); sql = sql.Replace("case when pkey.colname = pcolumn.column_name", "case when pkey.colname::text = pcolumn.column_name::text"); sql = sql.Replace("pcolumn on pcolumn.table_name = ptables.tablename", "pcolumn on pcolumn.table_name::text = ptables.tablename::text "); sql = sql.Replace("pkey on pcolumn.table_name = pkey.relname", "pkey on pcolumn.table_name::text = pkey.relname::text "); } return sql; } }
class:
KdbndpDbMaintenance
0 回复 -
fate sta VIP0
2024/8/26SqlSugarCore 5.1.4.168-preview09
过五分钟 更新一下这个版本测试一下 ,还有问题 加QQ沟通
610262374
0 回复 -
destiny_lv VIP0
2024/9/27这段时间没上论坛,已经没有这个问题了
0 回复