Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Hi Folks,
I've been asked a few times how to find out what spatial columns are defined in a database. We don't have any special table for this, but you can easily find out by looking at the usual system views:
SELECT ta.name as table_name, co.name as column_name
FROM sys.tables ta JOIN sys.columns co
ON ta.object_id = co.object_id
JOIN sys.types ty
ON co.user_type_id = ty.user_type_id
WHERE ty.name = 'geography' OR ty.name = 'geometry'
There's nothing special about spatial here: you can replace the type names in the WHERE clause of the query with any other type you'd like to find as well. For example, a simple change finds all integer columns:
SELECT ta.name as table_name, co.name as column_name
FROM sys.tables ta JOIN sys.columns co
ON ta.object_id = co.object_id
JOIN sys.types ty
ON co.user_type_id = ty.user_type_id
WHERE ty.name = 'int'
Cheers,
-Isaac
[16 April 2008]: Updated to correct a typo in the first query.
Comments
Anonymous
April 15, 2008
I think your query should read: WHERE ty.name = 'geography' OR ty.name = 'geometry' CheersAnonymous
April 16, 2008
Indeed---good catch! I've corrected the post. Thanks, -IsaacAnonymous
April 19, 2008
I think you can do that more easily and generically with the information_schema.columns (although haven't tried it out on SQL Server 2008 (just in prior SQL Servers)) Something of the form SELECT * FROM information_schema.columns WHERE data_type IN('geography', 'geometry') and the above trick works for PostGIS too since both SQL Server and PostgreSQL support the information_schema standard.