项目从mysql移植到SQL sqlserver问题汇总
2013-10-29 18:23
309 查看
一、 数据库表结构改变:
使用navicat for mysql导出的sql语句如例
CREATE TABLE `departments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`depname` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ms sqlserver不支持·符号,所有的表名、字段名需要去掉·号。
mysql的主键自增长为AUTO_INCREMENT, ms sqlserver为identity
ms server不支持int(11)的写法,改为int
例如:
CREATE TABLE [dbo].[departments](
[depname] [nchar](10) NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
插入数据的时候,ms server不需要传入自增长的主键,如果已有数据id,可以如下操作
SET IDENTITY_INSERT [TableName] ON
insert() valus(......)
SET IDENTITY_INSERT [TableName] OFF
二、项目使用springjdbc链接ms sqlserver2008,起初用的微软提供的jar包,但一直报错,提示不能重复获取多次,后来google了一下是微软驱动包兼容性问题,下载
第三方jtds-1.2.3.jar解决问题
三、mysql分页limit的使用,而在ms sqlserver不支持limit,使用top解决
//mysql版本
public List getPages(int currentPage, int NUM_PER_PAGE) {
List<Map<String, Object>> rows = jt
.queryForList(
"select name from tablename limit ?,?",
new Object[] {
(currentPage * NUM_PER_PAGE - NUM_PER_PAGE),
NUM_PER_PAGE });
return rows;
}
//ms sql版本
"select TOP (?) name from tablename where (ID NOT IN (SELECT TOP (?) id from tablename ORDER BY id)) ORDER BY ID",
new Object[] {
NUM_PER_PAGE ,currentPage * (NUM_PER_PAGE - NUM_PER_PAGE)});
return rows;
}
需要注意的是,top后面的占位符,不能使用?,需要用(?)代替
四、mysql支持boolean类型,而ms sqlserver不支持。
五、使用springjdbc传参的时候,mysql不需要指定string的类型,而ms sqlserver需要指定,因为ms sqlserver可能是varchar,也可能是nvarchar类型。比如
Object[] params = new Object[]{username};
int[] types = new int[]{Types.VARCHAR};
user=jdTempl.queryForObject(querySql,params,types,rowMapper);
六、发现通过ms server2008导出数据,id自动增长属性消失,通过
最后附上jdbc.properties配置文件
#mysql database setting
#jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/empdb?useUnicode=true&characterEncoding=utf-8
#jdbc.username=root
#jdbc.password=123456
#oracle database settings
#jdbc.driver=oracle.jdbc.driver.OracleDriver
#jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
#jdbc.username=username
#jdbc.password=123456
#mssql database settings
#jdbc.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
#jdbc.url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=empdb
jdbc.driver=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc:jtds:sqlserver://localhost:1433/empdb
jdbc.username=sa
jdbc.password=123456
使用navicat for mysql导出的sql语句如例
CREATE TABLE `departments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`depname` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ms sqlserver不支持·符号,所有的表名、字段名需要去掉·号。
mysql的主键自增长为AUTO_INCREMENT, ms sqlserver为identity
ms server不支持int(11)的写法,改为int
例如:
CREATE TABLE [dbo].[departments](
[depname] [nchar](10) NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
插入数据的时候,ms server不需要传入自增长的主键,如果已有数据id,可以如下操作
SET IDENTITY_INSERT [TableName] ON
insert() valus(......)
SET IDENTITY_INSERT [TableName] OFF
二、项目使用springjdbc链接ms sqlserver2008,起初用的微软提供的jar包,但一直报错,提示不能重复获取多次,后来google了一下是微软驱动包兼容性问题,下载
第三方jtds-1.2.3.jar解决问题
三、mysql分页limit的使用,而在ms sqlserver不支持limit,使用top解决
//mysql版本
public List getPages(int currentPage, int NUM_PER_PAGE) {
List<Map<String, Object>> rows = jt
.queryForList(
"select name from tablename limit ?,?",
new Object[] {
(currentPage * NUM_PER_PAGE - NUM_PER_PAGE),
NUM_PER_PAGE });
return rows;
}
//ms sql版本
"select TOP (?) name from tablename where (ID NOT IN (SELECT TOP (?) id from tablename ORDER BY id)) ORDER BY ID",
new Object[] {
NUM_PER_PAGE ,currentPage * (NUM_PER_PAGE - NUM_PER_PAGE)});
return rows;
}
需要注意的是,top后面的占位符,不能使用?,需要用(?)代替
四、mysql支持boolean类型,而ms sqlserver不支持。
五、使用springjdbc传参的时候,mysql不需要指定string的类型,而ms sqlserver需要指定,因为ms sqlserver可能是varchar,也可能是nvarchar类型。比如
Object[] params = new Object[]{username};
int[] types = new int[]{Types.VARCHAR};
user=jdTempl.queryForObject(querySql,params,types,rowMapper);
六、发现通过ms server2008导出数据,id自动增长属性消失,通过
先删除原有的id列 alter table aa drop column id 然后再重新添加一列具有 identity属性的字段 alter table aa add id int identity(1,1)
最后附上jdbc.properties配置文件
#mysql database setting
#jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/empdb?useUnicode=true&characterEncoding=utf-8
#jdbc.username=root
#jdbc.password=123456
#oracle database settings
#jdbc.driver=oracle.jdbc.driver.OracleDriver
#jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
#jdbc.username=username
#jdbc.password=123456
#mssql database settings
#jdbc.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
#jdbc.url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=empdb
jdbc.driver=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc:jtds:sqlserver://localhost:1433/empdb
jdbc.username=sa
jdbc.password=123456
相关文章推荐
- 项目从mysql移植到SQL sqlserver问题汇总
- 解决Microsoft SQL Server 企业管理器中无项目问题
- SQLyog连接问题:SQL Error (2003): Can't connect to MySQL server on '46.x.x.x' (10061)
- MySQL server has gone away,Mysql导入大容量SQL文件数据问题
- 数据库迁移:MySQL->PostgreSQL注意问题汇总(基于项目并不完整)
- 一个小项目从MS SQL Server移植到Oracle的SQL 语句的变化
- 分页显示问题(jsp/sqlserver/mysql/oracle)
- mysql之sql语句细节问题汇总
- ArcSDE for SQL Server 2008 安装问题汇总
- 项目实践中的问题 -- Create a SQL Server Database Using C#
- TFS问题集--团队项目创建项无法连接到指定SQL Server Reporting Services
- C#+SQL server 2012+vs2013课设小项目问题记录
- 数据库移植——从MySQL Server到MS SQL Server
- jdbc连接ms sqlserver 2000问题汇总
- ms SQLServer 2005移植到mysql
- VS2010/VS2013项目创建 ADO.NET连接mysql/sql server详细步骤
- SQLserver SSIS的问题 Integration Services项目 ETL 无法保存包的问题
- mysql/sqlserver where in 传参数的问题
- VS2010/VS2013项目创建 ADO.NET连接mysql/sql server详细步骤
- mysql导入sql问题:server has gone away