postgres 中的geometry_columns看起来像(gis.stackexchange中的问题):
SELECT
current_database()::character varying(256) AS f_table_catalog,
n.nspname::character varying(256) AS f_table_schema,
c.relname::character varying(256) AS f_table_name,
a.attname::character varying(256) AS f_geometry_column,
COALESCE(NULLIF(postgis_typmod_dims(a.atttypmod), 2),postgis_constraint_dims(n.nspname::text, c.relname::text, a.attname::text), 2) AS coord_dimension,
COALESCE(NULLIF(postgis_typmod_srid(a.atttypmod), 0), postgis_constraint_srid(n.nspname::text, c.relname::text, a.attname::text), 0) AS srid,
replace(replace(COALESCE(NULLIF(upper(postgis_typmod_type(a.atttypmod)), 'GEOMETRY'::text), postgis_constraint_type(n.nspname::text, c.relname::text, a.attname::text)::text, 'GEOMETRY'::text), 'ZM'::text, ''::text), 'Z'::text, ''::text)::character varying(30) AS type
FROM
pg_class c, pg_attribute a, pg_type t, pg_namespace n
WHERE
t.typname = 'geometry'::name
AND a.attisdropped = false
AND a.atttypid = t.oid
AND a.attrelid = c.oid
AND c.relnamespace = n.oid
AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char")
AND NOT pg_is_other_temp_schema(c.relnamespace)
AND NOT (n.nspname = 'public'::name AND c.relname = 'raster_columns'::name)
AND has_table_privilege(c.oid, 'SELECT'::text);
我为SQL Server做的另一种选择是:
SELECT
c.TABLE_CATALOG
,c.TABLE_SCHEMA AS TABLE_SCHEMA
,c.TABLE_NAME AS TABLE_NAME
,c.COLUMN_NAME AS COLUMN_NAME
FROM
information_schema.columns c
JOIN
information_schema.tables t ON c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE IN ('BASE TABLE','VIEW')
AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
WHERE
c.DATA_TYPE = 'geometry'
但它没有:
我知道SQL Server中获取上面列出的值的查询是:
SELECT distinct
@column_name.STDimension() as coord_dimension ,
SP_GEOMETRY.STGeometryType() as srid,
SP_GEOMETRY.STSrid
FROM
schema_name.@table_name
此查询需要通过表查询以查找不同的STDimension
,因为单个表可以有多个维度。
如何将这两个查询合并到一个查询中,就像在postgres中一样?
注意:我想使用只查看他们有权访问的表,我认为查询Information_schema
就足够了。我是对的吗?
答案 0 :(得分:1)
我不能说postgres的实现,但这些属性不是SQL Server中列本身的属性。也就是说,该列没有SRID,但其中的各个数据都有。理论上,你可以有两行,每行都有不同SRID的地理数据(例如)。尺寸和几何类型也是如此。所以你要找的东西不能作为表模式的元数据查找;你必须看看数据本身。