背景:当下电脑上有SqlServer2008的完整安装,他人提供给了我2012版本的mdf文件,但是打开后无法附加2012的mdf文件,因为版本不一致。
解决办法:
1,首先安装了SqlServer2012 Express的核心引擎,创建了2012的实例。从而可以用2008 Studio打开该实例,但是无法打开“附加”功能的交互窗体,猜测是视图版本不一致。
2,继续安装SqlServer2012 Express的Studio,则可以用2012 Studio打开实例、也可以用2008 Studio打开实例,而后打开“附加”功能,附加mdf从而创建了2012版本的数据库。
要将2012版本的数据库同步复制到2008版本,还需要继续操作:
1,2012 Studio中可以创建脚本,其中“高级”处的配置“要编写脚本的数据的类型”要是“架构和数据”。结果生成的数据库脚本不能够在2008上成功执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
USE [master] GO /****** Object: Database
[PAMPFlowConfig] Script Date : 2014/4/2 16:52:45 ******/
CREATE DATABASE [PAMPFlowConfig]
CONTAINMENT = NONE
ON
PRIMARY
( NAME
= N ‘PAMPFlowConfig‘ , FILENAME = N ‘C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\PAMPFlowConfig_new.mdf‘
, SIZE = 10240KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME
= N ‘PAMPFlowConfig_log‘ , FILENAME = N ‘C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\PAMPFlowConfig_new_log.LDF‘
, SIZE = 3136KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO ALTER DATABASE [PAMPFlowConfig] SET
COMPATIBILITY_LEVEL = 100
GO IF (1 = FULLTEXTSERVICEPROPERTY( ‘IsFullTextInstalled‘ ))
begin EXEC [PAMPFlowConfig].[dbo].[sp_fulltext_database] @ action
= ‘enable‘
end GO USE [PAMPFlowConfig] GO /****** Object: Table
[dbo].[Case_Config_Annuity_Fee] Script Date : 2014/4/2 16:52:45 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO SET ANSI_PADDING ON
GO CREATE
TABLE [dbo].[Case_Config_Annuity_Fee](
[country] [ varchar ](10) NOT
NULL ,
[ year ] [ int ] NOT
NULL ,
[applicantType] [ int ] NOT
NULL ,
[appType] [ int ] NOT
NULL ,
[amount] [ decimal ](18, 2) NOT
NULL ,
[currency] [ varchar ](32) NOT
NULL ,
CONSTRAINT
[PK_Case_Config_Annuity_Fee] PRIMARY
KEY CLUSTERED
( [country] ASC ,
[ year ] ASC ,
[applicantType] ASC ,
[appType] ASC
) WITH
(PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON
[ PRIMARY ]
) ON
[ PRIMARY ]
|
2,继而尝试使用2008Studio生成脚本,其中设置“编写数据的脚本”要为True。该脚本不会自动创建database,所以要首先创建一个2008版本的对应新数据库,然后直接执行该脚本则可将数据库结构与数据都成功复制!
3,因为我们在开发时经常改动数据库,从而需要比较数据库的区别并同步,所以此时最好也同样使用Sql Compare工具检查一下两个数据库是否一致。如果不一致,直接使用该工具的同步功能进一步调整。
相关知识:
1,数据库的导入导出功能使用时,如果有identity列,则要选中“启用标识插入”。否则会插入失败。
2,如果一个表temp表中id列为自增列,则
1
2
|
insert into temp (id)
select 1
|
会报错,因为自增列不允许插入。
解决方法:
1
2
|
TRUNCATE
TABLE temp
SET
IDENTITY_INSERT temp
ON
|
即清空表,而后将该字段置为可插入,则可成功执行。而后将其重新置为不可插入即可:
1
|
SET
IDENTITY_INSERT temp
OFF
|