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.
Applies to: 
 SQL Server 
 Azure SQL Database 
 Azure SQL Managed Instance 
 SQL analytics endpoint in Microsoft Fabric 
 Warehouse in Microsoft Fabric 
 SQL database in Microsoft Fabric Preview
A MultiPolygon instance is a collection of zero or more Polygon instances.
Polygon instances
The illustration below shows examples of MultiPolygon instances.
 
As shown in the illustration:
- Figure 1 is a MultiPolygon instance with two Polygon elements. The boundary is defined by the two exterior rings and the three interior rings. 
- Figure 2 is a MultiPolygon instance with two Polygon elements. The boundary is defined by the two exterior rings and the three interior rings. The two Polygon elements intersect at a tangent point. 
Accepted instances
A MultiPolygon instance is accepted one of the following conditions is met.
- It is an empty MultiPolygon instance. 
- All instances comprising the MultiPolygon instance are accepted Polygon instances. For more information on accepted Polygon instances, see Polygon. 
The following examples show accepted MultiPolygon instances.
DECLARE @g1 geometry = 'MULTIPOLYGON EMPTY';  
DECLARE @g2 geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))';  
DECLARE @g3 geometry = 'MULTIPOLYGON(((2 2, 2 -2, -2 -2, -2 2, 2 2)),((1 1, 3 1, 3 3, 1 3, 1 1)))';  
The following example shows a MultiPolygon instance that will throw a System.FormatException.
DECLARE @g geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3)))';  
The second instance in the MultiPolygon is a LineString instance and not an accepted Polygon instance.
Valid instances
A MultiPolygon instance is valid if it is an empty MultiPolygon instance or if it meets the following criteria.
- All of the instances comprising the MultiPolygon instance are valid Polygon instances. For valid Polygon instances, see Polygon. 
- None of the Polygon instances comprising the MultiPolygon instance overlap. 
The following example shows two valid MultiPolygon instances and one invalid MultiPolygon instance.
DECLARE @g1 geometry = 'MULTIPOLYGON EMPTY';  
DECLARE @g2 geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))';  
DECLARE @g3 geometry = 'MULTIPOLYGON(((2 2, 2 -2, -2 -2, -2 2, 2 2)),((1 1, 3 1, 3 3, 1 3, 1 1)))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();  
@g2 is valid because the two Polygon instances touch only at a tangent point. @g3 is not valid because the interiors of the two Polygon instances overlap each other.
Examples
Example A.
The following example shows the creation of a geometry MultiPolygon instance and returns the Well-Known Text (WKT) of the second component.
DECLARE @g geometry;  
SET @g = geometry::Parse('MULTIPOLYGON(((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1)), ((9 9, 9 10, 10 9, 9 9)))');  
SELECT @g.STGeometryN(2).STAsText();  
Example B.
This example instantiates an empty MultiPolygon instance.
DECLARE @g geometry;  
SET @g = geometry::Parse('MULTIPOLYGON EMPTY');