SELECT DISTINCT C_TBL.TABLE_CATALOG, C_TBL.TABLE_SCHEMA, C_TBL.TABLE_NAME, C_TBL.COLUMN_NAME, C_TBL.IS_NULLABLE, C_TBL.DATA_TYPE, C_TBL.COLUMN_DEFAULT, C_TBL.CHARACTER_MAXIMUM_LENGTH, C_TBL.NUMERIC_PRECISION, C_TBL.NUMERIC_PRECISION_RADIX, C_TBL.NUMERIC_SCALE, PK_TBL.CONSTRAINT_TYPE, C_TBL.ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS C_TBL LEFT OUTER JOIN (SELECT DISTINCT k.TABLE_CATALOG, k.TABLE_SCHEMA, k.TABLE_NAME, k.COLUMN_NAME, tc.constraint_type FROM information_schema.key_column_usage k INNER JOIN information_schema.table_constraints tc ON tc.constraint_name = k.constraint_name WHERE tc.constraint_type = 'PRIMARY KEY') PK_TBL ON C_TBL.TABLE_CATALOG = PK_TBL.TABLE_CATALOG AND C_TBL.TABLE_SCHEMA = PK_TBL.TABLE_SCHEMA AND C_TBL.TABLE_NAME = PK_TBL.TABLE_NAME AND C_TBL.COLUMN_NAME = PK_TBL.COLUMN_NAME ORDER BY C_TBL.TABLE_CATALOG, C_TBL.TABLE_SCHEMA, C_TBL.TABLE_NAME, C_TBL.ORDINAL_POSITION