DAT 331: 实例演示:用SQL Server 2008开发一个地理信息处理系统

 

-----------------------------------------------------------------

-- 空间数据的处理

-----------------------------------------------------------------

--

declare @point Geometry

set @point = Geometry::Parse('POINT(0 0)')

select @point.ToString(), @point.STBuffer(10)

go

-- 多点

declare @mpoint Geometry

set @mpoint = Geometry::Parse('MULTIPOINT(0 0, 0 80, 80 80, 0 80)')

select @mpoint.ToString(), @mpoint.STBuffer(2)

go

-- 多边型

-- 1) 至少四个不同点

-- 2) 起点和终点一致

declare @polygon Geometry

set @polygon = Geometry::Parse('POLYGON((0 0, 0 40, 40 40, 40 0, 0 0))')

select @polygon.ToString(), @polygon

go

DECLARE @g geography;

SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);

select @g.STBuffer(0.01)

SELECT @g.BufferWithTolerance(1, .5, 0).ToString();

 

-- 多个多边型

declare @mpolygon Geometry

set @mpolygon = Geometry::Parse('MULTIPOLYGON(((0 0, 0 80, 80 80, 0 80, 0 0), (-1 -1, -2 -10, -10 -2, -1 -1)))')

select @mpolygon.ToString(), @mpolygon

go

-- 线: 至少两个不同点

declare @line Geometry

set @line = Geometry::Parse('LINESTRING(0 0, 0 0, 0 0)')

select @line.ToString()

select @line.STNumPoints()

go

-- 多线

-- Note: Polygon is LingString too

declare @mline Geometry

set @mline = Geometry::Parse('MULTILINESTRING((0 0, 5 5, 0 0), (0 0, 0 80, 80 80, 0 80, 0 0))')

select @mline.ToString()

go

-- 空间集GeometryCollection

declare @gc Geometry

set @gc = Geometry::Parse('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0, 5 5), POLYGON((0 0, 0 80, 80 80, 0 80, 0 0)))')

select @gc.ToString()

go

-- 一个使用实例

DECLARE @g geometry = geometry::STGeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))', 0);

DECLARE @h geometry = geometry::STGeomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))', 0);

--DECLARE @h geometry = geometry::STGeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))', 0);

SELECT @g.STContains(@h);

SELECT @h.STContains(@g)

go

 

-----------------------------------------------------------------

-- 有关日期、时间的新数据类型

-----------------------------------------------------------------

if exists( select * from sys.tables where name = 't1' )

  drop table t1

 go

CREATE TABLE t1 (

    c1 DATE,

    c2 TIME(3),

    c3 DATETIME2(7) NOT NULL DEFAULT GETDATE(),

    c4 DATETIMEOFFSET CHECK (c4 < CAST(GETDATE() AS DATETIMEOFFSET(0)))

)

go

INSERT INTO t1 VALUES ('0001-01-01', '23:59:59',

    '0001-12-21 23:59:59.1234567',

    '2008-10-10 23:59:59.1234567 -07:00')

go

SELECT c4 cDateTimeOffset,

       DATEPART(TZOFFSET, c4) cTimeZone,

       DATEPART(ISO_WEEK, c4) cWeek,

       DATEPART(MICROSECOND, c4) cMicrosecond

FROM t1

go

-- 通过改变本机的时区, 观察SYSDATETIMEOFFSET不同的结果

SELECT SYSDATETIME(), SYSUTCDATETIME(), SYSDATETIMEOFFSET()

go

 

-----------------------------------------------------------------

-- 文件流(Filestream). 注意: 需要先激活这一功能。

-----------------------------------------------------------------

use master

go

-- enable filestream

sp_configure 'filestream_access_level', 2

reconfigure with override

go

 

if exists( select * from sys.databases where name = 'MyFSDB' )

  drop database MyFSDB

go

-- 注意: 改变下面文件路径以适应你的系统

create database MyFSDB

on primary

( name = MyFSDB_dat,

  filename = 'c:\sqldata\FS\MyFSDB_dat.mdf' ),

filegroup filestreamgroup contains filestream

( name = MyFSDB_fsGroup,

  filename = 'c:\sqldata\FS\MyFSDB_fsGroup' )

log on

( name = MyFSDB_log,

  filename = 'c:\sqldata\FS\MyFSDB_log.ldf' )

go

use MyFSDB

go

 

-- create table with column on filestream

CREATE TABLE demoFilestream (

fileID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL primary key,

fileName NVARCHAR(256),

officeFile VARBINARY(MAX) FILESTREAM)

filestream_on filestreamgroup

go

-- insert NULL value

insert demoFilestream values(newid(), NULL, NULL)

-- insert empty value

insert demoFilestream values(newid(), 'EmptyFile', cast('' as varbinary(max)))

-- insert some value

insert demoFilestream values(newid(), 'HelloWorld.doc', cast(N'Hello World! 世界,你好!' as varbinary(max)))

go

-- take a look the data

SELECT *, datalength(officeFile)

, cast(officeFile as nvarchar(max))

, officeFile.PathName()

from demoFilestream

go

 

-----------------------------------------------------------------

-- 稀疏列Sparse Column

-----------------------------------------------------------------

drop table tblTestBig

go

-- create table with a set of sparse column, and a column set

create table tblTestBig

( c1 int,

  c2 int sparse,

  c3 varchar(8000) sparse,

  c4 varchar(50) sparse,

  cs xml column_set for all_sparse_columns

)

go

-- insert a row

insert tblTestBig (c1, c2, c3, c4) values(

120, null,

'12345678901234567890123456789012345678901234567890',

'abcdefghijklmnopqrstuvwxyz')

go

-- select from it

select * from tblTestBig

go

-- add another column

alter table tblTestbig add c5 int sparse

go

-- select again and see the difference

select * from tblTestBig

go

-- insert another row

insert tblTestBig (c1, c2, c3, c4, c5) values(

120, null,

'12345678901234567890123456789012345678901234567890',

'abcdefghijklmnopqrstuvwxyz',

'100')

go

-- select from it

select * from tblTestBig

go

 

-----------------------------------------------------------------

-- 全文本搜索的演示将在下一帖中展示。

-----------------------------------------------------------------