/*************************************************************

Author:   LzmTW(水如烟)

Create date: 20060921

Description: 行政区划数据数据库生成脚本,适用于SQLServer2005

***************************************************************/

USE [master]

GO

/****** 对象:  Database [RegionalCodeWorks]    脚本日期: 09/21/2006 20:38:21 ******/

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'RegionalCodeWorks')

DROP DATABASE RegionalCodeWorks

GO

CREATE DATABASE RegionalCodeWorks

GO

EXEC dbo.sp_dbcmptlevel @dbname=N'RegionalCodeWorks', @new_cmptlevel=90

GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))

begin

EXEC [RegionalCodeWorks].[dbo].[sp_fulltext_database] @action = 'disable'

end

GO

ALTER DATABASE [RegionalCodeWorks] SET ANSI_NULL_DEFAULT OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET ANSI_NULLS OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET ANSI_PADDING OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET ANSI_WARNINGS OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET ARITHABORT OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET AUTO_CLOSE OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET AUTO_CREATE_STATISTICS ON

GO

ALTER DATABASE [RegionalCodeWorks] SET AUTO_SHRINK OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET AUTO_UPDATE_STATISTICS ON

GO

ALTER DATABASE [RegionalCodeWorks] SET CURSOR_CLOSE_ON_COMMIT OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET CURSOR_DEFAULT  GLOBAL

GO

ALTER DATABASE [RegionalCodeWorks] SET CONCAT_NULL_YIELDS_NULL OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET NUMERIC_ROUNDABORT OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET QUOTED_IDENTIFIER OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET RECURSIVE_TRIGGERS OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET  ENABLE_BROKER

GO

ALTER DATABASE [RegionalCodeWorks] SET AUTO_UPDATE_STATISTICS_ASYNC OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET DATE_CORRELATION_OPTIMIZATION OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET TRUSTWORTHY OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET ALLOW_SNAPSHOT_ISOLATION OFF

GO

ALTER DATABASE [RegionalCodeWorks] SET PARAMETERIZATION SIMPLE

GO

ALTER DATABASE [RegionalCodeWorks] SET  READ_WRITE

GO

ALTER DATABASE [RegionalCodeWorks] SET RECOVERY SIMPLE

GO

ALTER DATABASE [RegionalCodeWorks] SET  MULTI_USER

GO

ALTER DATABASE [RegionalCodeWorks] SET PAGE_VERIFY CHECKSUM

GO

ALTER DATABASE [RegionalCodeWorks] SET DB_CHAINING OFF

USE [RegionalCodeWorks]

GO

/****** 对象:  Schema [Program]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'Program')

EXEC sys.sp_executesql N'CREATE SCHEMA [Program] AUTHORIZATION [dbo]'

GO

/****** 对象:  Schema [FUNCTION]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'FUNCTION')

EXEC sys.sp_executesql N'CREATE SCHEMA [FUNCTION] AUTHORIZATION [dbo]'

GO

/****** 对象:  Schema [Edit]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'Edit')

EXEC sys.sp_executesql N'CREATE SCHEMA [Edit] AUTHORIZATION [dbo]'

GO

/****** 对象:  Schema [Base]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'Base')

EXEC sys.sp_executesql N'CREATE SCHEMA [Base] AUTHORIZATION [dbo]'

GO

/****** 对象:  Schema [Action]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'Action')

EXEC sys.sp_executesql N'CREATE SCHEMA [Action] AUTHORIZATION [dbo]'

GO

/****** 对象:  Table [Base].[行政区级别]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Base].[行政区级别]') AND type in (N'U'))

BEGIN

CREATE TABLE [Base].[行政区级别](

[级别ID] [smallint] IDENTITY(0,1) NOT NULL,

[级别] [nchar](10) NOT NULL,

CONSTRAINT [PK_行政区级别] PRIMARY KEY CLUSTERED

(

[级别ID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY],

CONSTRAINT [IX_行政区级别] UNIQUE NONCLUSTERED

(

[级别] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

/****** 对象:  Default [Base].[RegionalDateDefault]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[Base].[RegionalDateDefault]') AND OBJECTPROPERTY(id, N'IsDefault') = 1)

EXEC dbo.sp_executesql N'/****** 对象:  Default [Salary].[SalaryDateDefault]    脚本日期: 09/17/2006 14:44:13 ******/

--USE EmployeeWorks

CREATE DEFAULT [Base].[RegionalDateDefault] AS N''Current'''

GO

/****** 对象:  Rule [Base].[RegionalCodeRule]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[Base].[RegionalCodeRule]') AND OBJECTPROPERTY(id, N'IsRule') = 1)

EXEC dbo.sp_executesql N'

CREATE RULE [Base].[RegionalCodeRule]

AS

@value LIKE ''[1-9][0-9][0-9][0-9][0-9][0-9]''

'

GO

/****** 对象:  Table [Base].[行政区类型]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Base].[行政区类型]') AND type in (N'U'))

BEGIN

CREATE TABLE [Base].[行政区类型](

[类型ID] [smallint] IDENTITY(0,1) NOT NULL,

[类型] [nvarchar](50) NOT NULL,

[级别ID] [smallint] NOT NULL,

CONSTRAINT [PK_行政区类型] PRIMARY KEY CLUSTERED

(

[类型ID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY],

CONSTRAINT [IX_行政区类型] UNIQUE NONCLUSTERED

(

[类型] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

/****** 对象:  UserDefinedDataType [Base].[RegionalDate]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.types st JOIN sys.schemas ss ON st.schema_id = ss.schema_id WHERE st.name = N'RegionalDate' AND ss.name = N'Base')

CREATE TYPE [Base].[RegionalDate] FROM [nvarchar](8) NOT NULL

GO

EXEC sys.sp_bindefault @defname=N'[Base].[RegionalDateDefault]', @objname=N'[Base].[RegionalDate]' , @futureonly='futureonly'

GO

/****** 对象:  UserDefinedDataType [Base].[RegionalCode]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.types st JOIN sys.schemas ss ON st.schema_id = ss.schema_id WHERE st.name = N'RegionalCode' AND ss.name = N'Base')

CREATE TYPE [Base].[RegionalCode] FROM [nchar](6) NOT NULL

GO

EXEC sys.sp_bindrule @rulename=N'[Base].[RegionalCodeRule]', @objname=N'[Base].[RegionalCode]' , @futureonly='futureonly'

GO

/****** 对象:  Table [Base].[区划码]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Base].[区划码]') AND type in (N'U'))

BEGIN

CREATE TABLE [Base].[区划码](

[区划码ID] [smallint] IDENTITY(1,1) NOT NULL,

[区划码] [Base].[RegionalCode] NOT NULL,

[一级]  AS (substring([区划码],(1),(2))),

[二级]  AS (substring([区划码],(3),(2))),

[三级]  AS (substring([区划码],(5),(2))),

CONSTRAINT [PK_区划码] PRIMARY KEY CLUSTERED

(

[区划码ID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY],

CONSTRAINT [IX_区划码] UNIQUE NONCLUSTERED

(

[区划码] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

SET ARITHABORT ON

SET CONCAT_NULL_YIELDS_NULL ON

SET QUOTED_IDENTIFIER ON

SET ANSI_NULLS ON

SET ANSI_PADDING ON

SET ANSI_WARNINGS ON

SET NUMERIC_ROUNDABORT OFF

/****** 对象:  Index [IX_区划码_1]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[Base].[区划码]') AND name = N'IX_区划码_1')

CREATE NONCLUSTERED INDEX [IX_区划码_1] ON [Base].[区划码]

(

[一级] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

GO

SET ARITHABORT ON

SET CONCAT_NULL_YIELDS_NULL ON

SET QUOTED_IDENTIFIER ON

SET ANSI_NULLS ON

SET ANSI_PADDING ON

SET ANSI_WARNINGS ON

SET NUMERIC_ROUNDABORT OFF

/****** 对象:  Index [IX_区划码_2]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[Base].[区划码]') AND name = N'IX_区划码_2')

CREATE NONCLUSTERED INDEX [IX_区划码_2] ON [Base].[区划码]

(

[二级] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

GO

SET ARITHABORT ON

SET CONCAT_NULL_YIELDS_NULL ON

SET QUOTED_IDENTIFIER ON

SET ANSI_NULLS ON

SET ANSI_PADDING ON

SET ANSI_WARNINGS ON

SET NUMERIC_ROUNDABORT OFF

/****** 对象:  Index [IX_区划码_3]    脚本日期: 09/21/2006 20:38:24 ******/

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[Base].[区划码]') AND name = N'IX_区划码_3')

CREATE NONCLUSTERED INDEX [IX_区划码_3] ON [Base].[区划码]

(

[三级] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

GO

EXEC sys.sp_bindrule @rulename=N'[Base].[RegionalCodeRule]', @objname=N'[Base].[区划码].[区划码]' , @futureonly='futureonly'

GO

/****** 对象:  Table [Edit].[区划码情况]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Edit].[区划码情况]') AND type in (N'U'))

BEGIN

CREATE TABLE [Edit].[区划码情况](

[ID] [int] IDENTITY(1,1) NOT NULL,

[区划码ID] [smallint] NOT NULL,

[截止日期] [Base].[RegionalDate] NOT NULL,

[名称] [nvarchar](100) NOT NULL,

[起始日期] [Base].[RegionalDate] NOT NULL,

CONSTRAINT [PK_区划码情况] PRIMARY KEY CLUSTERED

(

[区划码ID] ASC,

[截止日期] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

EXEC sys.sp_bindefault @defname=N'[Base].[RegionalDateDefault]', @objname=N'[Edit].[区划码情况].[截止日期]' , @futureonly='futureonly'

GO

EXEC sys.sp_bindefault @defname=N'[Base].[RegionalDateDefault]', @objname=N'[Edit].[区划码情况].[起始日期]' , @futureonly='futureonly'

GO

/****** 对象:  Table [Edit].[行政区类型情况]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Edit].[行政区类型情况]') AND type in (N'U'))

BEGIN

CREATE TABLE [Edit].[行政区类型情况](

[ID] [smallint] IDENTITY(1,1) NOT NULL,

[类型ID] [smallint] NOT NULL,

[范围] [nvarchar](max) NOT NULL,

[截止日期] [Base].[RegionalDate] NOT NULL,

[起始日期] [Base].[RegionalDate] NOT NULL,

[备注] [nvarchar](max) NULL,

CONSTRAINT [PK_行政区类型情况] PRIMARY KEY CLUSTERED

(

[类型ID] ASC,

[截止日期] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

EXEC sys.sp_bindefault @defname=N'[Base].[RegionalDateDefault]', @objname=N'[Edit].[行政区类型情况].[截止日期]' , @futureonly='futureonly'

GO

EXEC sys.sp_bindefault @defname=N'[Base].[RegionalDateDefault]', @objname=N'[Edit].[行政区类型情况].[起始日期]' , @futureonly='futureonly'

GO

/****** 对象:  UserDefinedFunction [FUNCTION].[行政区类型情况]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[FUNCTION].[行政区类型情况]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

BEGIN

execute dbo.sp_executesql @statement = N'CREATE FUNCTION [FUNCTION].[行政区类型情况]

(

@当前时间 [Base].[RegionalDate] = N''Current''

)

RETURNS TABLE

AS

RETURN

(

SELECT a.*

FROM [Edit].[行政区类型情况] a

RIGHT OUTER JOIN

(

SELECT [类型ID]

,MIN(DISTINCT [截止日期])AS 查询时间

FROM [Edit].[行政区类型情况]

WHERE   @当前时间 BETWEEN [起始日期] AND [截止日期]

GROUP BY[类型ID]

) b

ON a.类型ID = b.类型ID AND a.截止日期 = b.查询时间

)

'

END

GO

/****** 对象:  UserDefinedFunction [FUNCTION].[区划码情况]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[FUNCTION].[区划码情况]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

BEGIN

execute dbo.sp_executesql @statement = N'CREATE FUNCTION [FUNCTION].[区划码情况]

(

@当前时间 [Base].[RegionalDate] = N''Current''

)

RETURNS TABLE

AS

RETURN

(

SELECT a.*

FROM [Edit].[区划码情况] a

RIGHT OUTER JOIN

(

SELECT [区划码ID]

,MIN(DISTINCT [截止日期])AS 查询时间

FROM [Edit].[区划码情况]

WHERE   @当前时间 BETWEEN [起始日期] AND [截止日期]

GROUP BY[区划码ID]

) b

ON a.区划码ID = b.区划码ID AND a.截止日期 = b.查询时间

)

'

END

GO

/****** 对象:  StoredProcedure [Program].[增添记录]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Program].[增添记录]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- =============================================

-- Author:  LzmTW

-- Create date: 20060917

-- Description: 增添记录

-- =============================================

CREATE PROCEDURE [Program].[增添记录]

@区划码 [Base].[RegionalCode]

,@名称  nvarchar(100)

,@起始日期 [Base].[RegionalDate]

AS

BEGIN

SET NOCOUNT ON;

--如果@起始日期小于表区划码情况的最新起始日期,则退出

DECLARE @最新起始日期 [Base].[RegionalDate]

SELECT @最新起始日期 = MAX(起始日期)

FROM [Edit].区划码情况

IF @起始日期 < @最新起始日期

RETURN

--如果主表区划码没有记录,则更新;取区划码ID

DECLARE @区划码ID smallint

SELECT @区划码ID = 区划码ID

FROM [Base].[区划码]

WHERE 区划码 = @区划码;

IF @区划码ID IS NULL

BEGIN

INSERT INTO [Base].[区划码](区划码)

VALUES(@区划码)

SET  @区划码ID = @@IDENTITY

END

--表区划码情况的更新

DECLARE  @ID  int

,@原名称 nvarchar(100)

SELECT  @ID = ID

,@原名称 = 名称

FROM  [FUNCTION].区划码情况(@起始日期)

WHERE 区划码ID = @区划码ID

IF @ID IS NULL

BEGIN

INSERT INTO [Edit].[区划码情况]

(

区划码ID

,名称

,起始日期

)

VALUES

(

@区划码ID

,@名称

,@起始日期

)

END

ELSE

BEGIN

--忽略同名的记录,也就是保持Current有效

IF @名称 = @原名称

RETURN

ELSE

BEGIN

--将原记录的截止日期更新为当前起始日期的前一日

UPDATE [Edit].[区划码情况]

SET 截止日期 = CONVERT(nchar(8) ,DATEADD(d, -1, CAST(@起始日期 as smalldatetime)) ,112)

WHERE ID = @ID

INSERT INTO [Edit].[区划码情况]

(

区划码ID

,名称

,起始日期

)

VALUES

(

@区划码ID

,@名称

,@起始日期

)

END

END

END

'

END

GO

/****** 对象:  StoredProcedure [Action].[区划码类型情况]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Action].[区划码类型情况]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- =============================================

-- Author:  LzmTW

-- Create date: 20060920

-- Description: 取区划码的类型ID

-- =============================================

CREATE PROCEDURE [Action].[区划码类型情况]

@当前时间 [Base].[RegionalDate] = N''Current''

AS

BEGIN

--通过临时表来处理数据

IF EXISTS

(

SELECT 1 FROM tempdb.dbo.sysobjects

WHERE [name] =  N''##区划码类型情况''  AND xtype=N''U''

)

DROP TABLE ##区划码类型情况

CREATE TABLE ##区划码类型情况

(

区划码ID smallint

,类型ID smallint

)

--取类型定义为未知的ID

DECLARE @未知ID smallint

SELECT @未知ID = 类型ID

FROM [Base].行政区类型

WHERE 类型 = N''未知''

--所有区划码的类型初始化为未知

INSERT INTO ##区划码类型情况

SELECT   区划码ID

,@未知ID as 类型ID

FROM [FUNCTION].区划码情况(@当前时间)

--以下处理的正确性取决于类型定义不存在交集!!

DECLARE  @Building nvarchar(MAX)

,@SQL  nvarchar(MAX)

,@类型ID smallint

,@范围  nvarchar(MAX)

SET @Building = N''

UPDATE ##区划码类型情况

SET 类型ID = b.类型ID

FROM ##区划码类型情况 a

INNER JOIN

(

SELECT   区划码ID

,{类型ID} AS 类型ID

FROM [Action].[行政区情况]('''''' + @当前时间 + N'''''')

WHERE {WHERE}

) b

ON a.区划码ID = b.区划码ID ''

--遍历类型定义表更新区划码类型

DECLARE 行政区类型_Cursor CURSOR FOR

SELECT   类型ID

,范围

FROM  [FUNCTION].行政区类型情况(@当前时间)

OPEN 行政区类型_Cursor

FETCH NEXT

FROM 行政区类型_Cursor

INTO @类型ID, @范围

WHILE (@@fetch_status<>-1)

BEGIN

IF (@@fetch_status<>-2)

BEGIN

SET @SQL = REPLACE(@Building, N''{类型ID}'', @类型ID)

SET @SQL = REPLACE(@SQL, N''{WHERE}'', @范围)

EXEC (@SQL)

FETCH NEXT

FROM 行政区类型_Cursor

INTO @类型ID, @范围

END

END

CLOSE 行政区类型_Cursor

DEALLOCATE 行政区类型_Cursor

SELECT *

FROM ##区划码类型情况

END

'

END

GO

/****** 对象:  UserDefinedFunction [Action].[行政区情况]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Action].[行政区情况]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

BEGIN

execute dbo.sp_executesql @statement = N'CREATE FUNCTION [Action].[行政区情况]

(

@当前时间 [Base].[RegionalDate] = N''Current''

)

RETURNS TABLE

AS

RETURN

(

SELECT  a.区划码ID

,a.区划码

,b.名称

,a.一级

,a.二级

,a.三级

,b.截止日期

,b.起始日期

FROM [Base].[区划码] a

INNER JOIN [FUNCTION].[区划码情况](@当前时间) b

ON a.区划码ID = b.区划码ID

)

'

END

GO

/****** 对象:  UserDefinedFunction [Action].[全名]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Action].[全名]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

BEGIN

execute dbo.sp_executesql @statement = N'-- =============================================

-- Author:  LzmTW

-- Create date: 20060921

-- Description: 取行政区的全名

-- =============================================

CREATE FUNCTION [Action].[全名]

(

@当前时间 [Base].[RegionalDate] = N''Current''

,@一级  nchar(2)

,@二级  nchar(2)

,@三级  nchar(2)

)

RETURNS nvarchar(200)

AS

BEGIN

--初始化变量

DECLARE  @全名  nvarchar(200)

,@一级名称 nvarchar(100)

,@二级名称 nvarchar(100)

,@三级名称 nvarchar(100)

SET @一级名称 = N''''

SET @二级名称 = N''''

SET @三级名称 = N''''

DECLARE  @一级区划码 [Base].RegionalCode

,@二级区划码 [Base].RegionalCode

,@当前区划码 [Base].RegionalCode

SET @一级区划码 = @一级 + N''00'' + N''00''

SET @二级区划码 = @一级 + @二级 + N''00''

SET @当前区划码 = @一级 + @二级 + @三级

--分三种情形取全名

IF @当前区划码 = @一级区划码

SELECT @一级名称 = 名称

FROM [Action].[行政区情况](@当前时间)

WHERE 区划码 = @当前区划码

ELSE

IF @当前区划码 = @二级区划码

BEGIN

SELECT @一级名称 = 名称

FROM [Action].[行政区情况](@当前时间)

WHERE 区划码 = @一级区划码

SELECT @二级名称 = 名称

FROM [Action].[行政区情况](@当前时间)

WHERE 区划码 = @当前区划码

END

ELSE

BEGIN

SELECT @一级名称 = 名称

FROM [Action].[行政区情况](@当前时间)

WHERE 区划码 = @一级区划码

SELECT @二级名称 = 名称

FROM [Action].[行政区情况](@当前时间)

WHERE 区划码 = @二级区划码

SELECT @三级名称 = 名称

FROM [Action].[行政区情况](@当前时间)

WHERE 区划码 = @当前区划码

END

IF @二级名称 IN(N''市辖区'', N''市'', N''县'')

SET @二级名称 = N''''

SET @全名 =   @一级名称

+ @二级名称

+ @三级名称

RETURN @全名

END

'

END

GO

/****** 对象:  StoredProcedure [Program].[行政区情况]    脚本日期: 09/21/2006 20:38:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Program].[行政区情况]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- =============================================

-- Author:  LzmTW

-- Create date: 20060921

-- Description: 取行政区的全名

-- =============================================

CREATE PROCEDURE [Program].[行政区情况]

@当前时间 [Base].[RegionalDate] = N''Current''

AS

BEGIN

SET NOCOUNT ON;

DECLARE @类型情况 TABLE

(

区划码ID smallint

,类型ID  smallint

)

INSERT INTO @类型情况

EXEC [Action].[区划码类型情况] @当前时间

SELECT TOP 100 PERCENT

d.区划码ID

,d.区划码

,d.名称

,[Action].全名(@当前时间, d.一级, d.二级, d.三级) AS 全名

,a.类型

,b.级别

,d.一级

,d.二级

,d.三级

,d.截止日期

,d.起始日期

,a.类型ID

,b.级别ID

FROM Base.行政区类型 AS a

INNER JOIN Base.行政区级别 AS b

ON a.级别ID = b.级别ID

INNER JOIN @类型情况 AS c

ON a.类型ID = c.类型ID

INNER JOIN [Action].行政区情况(@当前时间) AS d

ON d.区划码ID = c.区划码ID

ORDER BY d.一级, d.二级, d.三级

END

'

END

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[Base].[FK_行政区类型_行政区级别]') AND parent_object_id = OBJECT_ID(N'[Base].[行政区类型]'))

ALTER TABLE [Base].[行政区类型]  WITH CHECK ADD  CONSTRAINT [FK_行政区类型_行政区级别] FOREIGN KEY([级别ID])

REFERENCES [Base].[行政区级别] ([级别ID])

GO

ALTER TABLE [Base].[行政区类型] CHECK CONSTRAINT [FK_行政区类型_行政区级别]

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[Edit].[FK_区划码情况_区划码]') AND parent_object_id = OBJECT_ID(N'[Edit].[区划码情况]'))

ALTER TABLE [Edit].[区划码情况]  WITH CHECK ADD  CONSTRAINT [FK_区划码情况_区划码] FOREIGN KEY([区划码ID])

REFERENCES [Base].[区划码] ([区划码ID])

GO

ALTER TABLE [Edit].[区划码情况] CHECK CONSTRAINT [FK_区划码情况_区划码]

GO

IF NOT EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[Edit].[CK_区划码情况]') AND parent_object_id = OBJECT_ID(N'[Edit].[区划码情况]'))

ALTER TABLE [Edit].[区划码情况]  WITH CHECK ADD  CONSTRAINT [CK_区划码情况] CHECK  (([截止日期]>=[起始日期]))

GO

ALTER TABLE [Edit].[区划码情况] CHECK CONSTRAINT [CK_区划码情况]

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[Edit].[FK_行政区类型情况_行政区类型]') AND parent_object_id = OBJECT_ID(N'[Edit].[行政区类型情况]'))

ALTER TABLE [Edit].[行政区类型情况]  WITH CHECK ADD  CONSTRAINT [FK_行政区类型情况_行政区类型] FOREIGN KEY([类型ID])

REFERENCES [Base].[行政区类型] ([类型ID])

GO

ALTER TABLE [Edit].[行政区类型情况] CHECK CONSTRAINT [FK_行政区类型情况_行政区类型]

GO

IF NOT EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[Edit].[CK_行政区类型情况]') AND parent_object_id = OBJECT_ID(N'[Edit].[行政区类型情况]'))

ALTER TABLE [Edit].[行政区类型情况]  WITH CHECK ADD  CONSTRAINT [CK_行政区类型情况] CHECK  (([截止日期]>=[起始日期]))

GO

ALTER TABLE [Edit].[行政区类型情况] CHECK CONSTRAINT [CK_行政区类型情况]

GO

INSERT INTO [Base].[行政区级别]([级别]) VALUES (N'未知')

INSERT INTO [Base].[行政区级别]([级别]) VALUES (N'一级')

INSERT INTO [Base].[行政区级别]([级别]) VALUES (N'二级')

INSERT INTO [Base].[行政区级别]([级别]) VALUES (N'三级')

GO

INSERT INTO [Base].[行政区类型]([类型] ,[级别ID]) VALUES (N'未知' ,0)

INSERT INTO [Base].[行政区类型]([类型] ,[级别ID]) VALUES (N'省' ,1)

INSERT INTO [Base].[行政区类型]([类型] ,[级别ID]) VALUES (N'省直辖市' ,2)

INSERT INTO [Base].[行政区类型]([类型] ,[级别ID]) VALUES (N'地区州盟' ,2)

INSERT INTO [Base].[行政区类型]([类型] ,[级别ID]) VALUES (N'市地辖区' ,3)

INSERT INTO [Base].[行政区类型]([类型] ,[级别ID]) VALUES (N'县旗' ,3)

INSERT INTO [Base].[行政区类型]([类型] ,[级别ID]) VALUES (N'省直辖县级市' ,3)

GO

INSERT INTO [Edit].[行政区类型情况]

([类型ID]

,[范围]

,[起始日期]

,[备注])

VALUES

(1

,N'二级 = N''00'' AND 三级 = N''00'''

,N'20000101'

,N'省')

INSERT INTO [Edit].[行政区类型情况]

([类型ID]

,[范围]

,[起始日期]

,[备注])

VALUES

(2

,N'(二级 BETWEEN N''01'' AND N''20'' OR 二级 BETWEEN N''51'' AND N''99'' ) AND 三级 = N''00'' '

,N'20000101'

,N'省直辖市')

INSERT INTO [Edit].[行政区类型情况]

([类型ID]

,[范围]

,[起始日期]

,[备注])

VALUES

(3

,N'二级 BETWEEN N''21'' AND N''50'' AND 三级 = N''00'' '

,N'20000101'

,N'地区州盟')

INSERT INTO [Edit].[行政区类型情况]

([类型ID]

,[范围]

,[起始日期]

,[备注])

VALUES

(4

,N'三级 BETWEEN N''01'' AND N''20''  '

,N'20000101'

,N'市地辖区')

INSERT INTO [Edit].[行政区类型情况]

([类型ID]

,[范围]

,[起始日期]

,[备注])

VALUES

(5

,N'三级 BETWEEN N''21'' AND N''80'' '

,N'20000101'

,N'县旗')

INSERT INTO [Edit].[行政区类型情况]

([类型ID]

,[范围]

,[起始日期]

,[备注])

VALUES

(6

,N'三级 BETWEEN N''81'' AND N''99'' '

,N'20000101'

,N'省直辖县级市')

下载行政区划mysql表设计_行政区划数据数据库的设计(脚本)相关推荐

  1. 职工考勤管理MySQL课程设计_考勤管理系统数据库课程设计.doc

    课 程 设 计 课程名称 数据库系统概论_____ 题目名称 考勤管理系统 学生学院 计算机学院 专业班级 学 号 学生姓名 ________ 指导教师 左亚尧 2012年 1月 16日 一.需求分析 ...

  2. 论文中如何写mysql的介绍_论文中数据库概念设计怎么写

    试论网络课程的艺术设计 [摘 要] 网络课程的设计不仅仅是一个计算机技术问题和教学问题,更是一个艺术问题,网络课程的设计水平直接体现设计者的艺术修养.网络课程设计最常用的载体是网页,网页的艺术设计,日 ...

  3. 随机从mysql中读取_如何实现MySQL表数据随机读取?从mysql表中读取随机数据

    文章转自 http://blog.efbase.org/2006/10/16/244/ 如何实现MySQL表数据随机读取?从mysql表中读取随机数据?以前在群里讨论过这个问题,比较的有意思.mysq ...

  4. php 去掉无关数据,php 读取 mysql 表中的double数据,去掉多余的0

    php 读取 mysql 表中的double数据,去掉多余的0 mysql 中有 ttt 表结构和数据如下 CREATE TABLE `ttt` ( `id` int(11) NOT NULL AUT ...

  5. mysql 游戏服务器设计_网络游戏服务器数据库设计和实现.doc

    网络游戏服务器数据库设计和实现 摘 要 随着的普及,网络游戏已经成为大家耳濡目染的新生事物.现在,可以说网络游戏已经成为人们休闲.娱乐的有效方式.网络游戏必须依托于互联网可以多人同时参与游戏,通过人与 ...

  6. mysql表结构设计_数据库表结构设计

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...

  7. 怎么有效地查询MySQL表中的重复数据

    在MySQL数据库中,偶尔会遇到需要查找表中出现的重复数据的情况.这种情况下,我们可以通过编写一些SQL查询语句轻松地找到并处理这些重复行.本文将介绍一些常见的方法和技巧,帮助你有效地查询MySQL表 ...

  8. 餐饮管理系统 mysql数据库设计分析_终稿课程设计_餐饮管理系统数据库设计.docOK版(样例3)...

    <课程设计_餐饮管理系统数据库设计.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)课程设计_餐饮管理系统数据库设计.doc(OK版)>相关文档资源请在帮帮文库(www ...

  9. 网上订餐系统 mysql 数据库设计_网上订餐系统的设计与实现

    摘要: 进入21世纪,伴随着我国的综合国力的迅速提升,科技的迅猛发展,网络信息化和电子商务已经渗透到了人类社会的各个方面与角落.网购再也不是新鲜的代名词,它已经成为我们寻常生活的一部分.人们在网上购买 ...

  10. 数据库设计-博客系统数据库的设计

    数据库设计-博客系统数据库的设计 数据库整体设计 问题: 一个博客系统会有哪些功能呢,肯定会有的是博客列表,博客详情,评论,登陆注册等等这些功能,那应该建多少张表呢?应该给这些表添加哪些字段呢?字段的 ...

最新文章

  1. 姚期智云栖大会首日演讲:为什么我说现在是金融科技的“新”黄金时代
  2. Maven本地缓存清理小工具
  3. 本人对于netty框架的一些理解,怎么与网站上的websock建立连接
  4. GNS结合SecureCRT连接问题
  5. java 内部类and匿名类
  6. 现在最简单的赚钱套路
  7. hdu 5120(求两个圆环相交的面积 2014北京现场赛 I题)
  8. java设计模式之模板方法模式(Template Method)
  9. 51单片机(一)—— 51单片机简介
  10. 十七.降维之谱分解和奇异值分解
  11. 关于这个开源项目 from VIP Lab
  12. 《今日简史》谈到的生物技术和人工智能技术
  13. 东财《自我认知与职业生涯规划》单元作业一二三
  14. 【2020年高被引学者】 田奇 华为
  15. informatica 学习日记整理(转)
  16. 时间继电器的应用和常用型号
  17. signature=1e627a907c86a2ecea855afa2fce9a87,熟练掌握 openssl 证书命令说明
  18. 浅浅轻吟如花的芬芳,开始散漫着
  19. go 框架 —— beego安装
  20. ens33网卡没有IP地址的解决方案

热门文章

  1. docker容器杀不死_了解如何停止,杀死和清理Docker容器
  2. Virtualbox虚拟机运行加速
  3. Webug4.0 越权修改密码
  4. 三轴陀螺仪 偏置稳定性 光纤陀螺 光纤陀螺仪 光纤陀螺惯性导航系统 光纤陀螺惯性测量单元 六自由度IMU 单轴激光陀螺仪 双天线组合导航系统 双轴精确陀螺仪 导航级FOG怎么选择?
  5. 【蒙古文】:传统蒙古语网页显示方法
  6. 14 目录文件夹和根目录
  7. [前端工坊]第二届京东技术节-前端技术实践专场
  8. //过360云查杀的代码
  9. win10计算机的磁盘管理员权限,win10系统无法修改磁盘名称提示需要管理员权限的解决方法...
  10. 精心整理shell脚本100例(最新版)