ACCESS改为SQL需要注意哪几个地方

 更新时间:2016年11月25日 16:45  点击:1384
看到别人有时问这个方面的问题。。于是在各网站总结前前辈高人的几点想法,拿来共享:
数据库导入以后,自动增加字段需要重写,所有的数字类型需要增加长度,最好用decimal。
所有的默认值都丢失了。主要是数字类型和日期类型。
所有now(),time(),date()要改成getdate()。
所有datediff('d', time1, time2)要改成datediff(day, time1, time2)
有可能一些true/false类型不能使用,要变为1/0。
备注类型要通过cast(column as varchar)来使用。
CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整。
isnull(rowname)要改成rowname = null
ACCESS的数据库中的自动编号类型在转化时,sql server并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号!
转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时,转化失败,而用datetime型时,转化成功。
对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:"delete * from user where id=10",而对SQL SERVER数据库进行删除是用:"delete user where id=10".
日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。
在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用。


有时候我们要取得的一部分数据在sql的数据库中,而另一部分数据在access数据库中,但是有时候却需要把这两个数据库中的数据关联起来进行查询,把他们整合在一个数据集合里无疑是一个很好的方法,按照下面这段操作,你就可以在只有sql连接数据库语句的情况下进行sql数据和access数据的联合查询
首先你要用有数据库管理者权限的账号执行下面的脚本01_AddLinkServer.sql,01_AddLinkServer.sql的内容如下:
use master
EXEC sp_addlinkedserver
@server='VALINKMDB',
@srvproduct = '',
@provider='Microsoft.Jet.OLEDB.4.0',
@datasrc='C:McMo.mdb'
GO
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'VALINKMDB',
@useself = 'false'
GO
VALINKMDB是模拟access数据库,确认SQLServer的EnterpriseManager上的安全性-链接服务器的>项目,
请确认VALINKMDB的entry被制作。然后你就可以在sql的查询分析器上直接查询aceess数据库里的数据了,比如:select * from VALINKMDB...test,此处的test就是access数据库中的你要查询的那个表的名字,当然这个时候你也可以进行联合查询了,比如:select * from VALINKMDB...test inner join sqldatabase on sqldatabase .number = test .number
你可以在asp或者.net或者其它语言进行应用
如果有什么问题,请提出共同交流


  以前在介绍SQL2k的时候已经提到了SQL2k对XML的支持,使用for XML语句就可以很容易的把执行的结果转化为一个XML,这样可以在很大程度上提高系统运行效率和开发速度,详细的内容请参见Books Online。
 
  但是在使用ADO(Required ADO 2.6)访问返回的XML的方式和原来的Recordset是有所不同的。如果你还是使用Recordset访问的话,只能得到一个Unicode格式的XML Schema,而无法得到XML的内容。
 
  其实这个问题也是很容易就能解决的,只是我自以为很熟悉ADO,没有仔细看Help,所以没有发现ADO是采用Stream的方式来得到和返回XML的。
 
  Command 对象有两个属性,叫Input Stream和Output Stream,属性的值是一个IUnknown接口。可以把一个XML Parser的接口赋给它,或者是直接用Request、Response等。这样的好处是不需要再去生成一个Recordset,不需要去保存这些数据,从而节省了系统开销。
 
  下面给大家一个简单的把XML用Response返回的Example:
<%@ Language=VBScript %>
<!-- #include file="ADOVBS.inc" -->
<%
 Dim objConn, objCmd, i
 Set objConn = Server.createobject("ADODB.CONNECTION")
 objConn.Open "Provider=SQLOLEDB.1;Password=;Persist Security Info=True;User ID=sa;Initial Catalog=PBA;Data Source=(local)"
 Set objCmd = Server.CreateObject("ADODB.Command")
 objCmd.ActiveConnection = objConn
 objCmd.Properties("Output Stream") = Response
 objCmd.Properties("XML Root") = "root"
 objCmd.CommandText = "Select * from UserStatus for XML Auto"
 Response.ContentType = "text/xml"
 objCmd.Execute i, , adExecuteStream
 Set objCmd = Nothing
 objConn.Close
 Set objConn = Nothing
%>


设置 MySql 数据同步
  mysql从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能
  数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf 或者在mysql用户的home目录下的my.cnf。
 
  window环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf 命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。
 
  设置方法:
  设置范例环境:
  操作系统:window2000 professional
  mysql:4.0.4-beta-max-nt-log
  A ip:10.10.10.22
  B ip:10.10.10.53
  A:设置
  1.增加一个用户最为同步的用户帐号:

GRANT FILE ON *.* TO backup@'10.10.10.53' IDENTIFIED BY '1234’

  2.增加一个数据库作为同步数据库:

create database backup

  B:设置
  1.增加一个用户最为同步的用户帐号:

GRANT FILE ON *.* TO backup@'10.10.10.22' IDENTIFIED BY '1234’

 2.增加一个数据库作为同步数据库:

create database backup

  主从模式:A->B
  A为master
  修改A mysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=1log-bin#设置需要记录log 可以设置log-bin=c:mysqlbakmysqllog 设置日志文件的目录,#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。binlog-do-db=backup #指定需要日志的数据库

  重起数据库服务。
 
  用show master status 命令看日志情况。
 
  B为slave
  修改B mysql的my.ini文件。在mysqld配置项中加入下面配置:

server-id=2master-host=10.10.10.22master-user=backup

#同步用户帐号

master-password=1234master-port=3306master-connect-retry=60
  说明:复制表(只复制结构,源表名:a 新表名:b)
  SQL: select * into b from a where 1<>1   
  说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
  SQL: insert into b(a, b, c) select d,e,f from b;   
  说明:显示文章、提交人和最后回复时间
  SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b  
  说明:外连接查询(表名1:a 表名2:b)
  SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c   
  说明:日程安排提前五分钟提醒
  SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5   
  说明:两张关联表,删除主表中已经在副表中没有的信息
  SQL:
  delete from info where not exists ( select * from infobz where info.infid=infobz.infid )   
  说明:--
  SQL:
  SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE FROM TABLE1,(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, (SELECT NUM, UPD_DATE, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') &brvbar;&brvbar; '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y, WHERE X.NUM = Y.NUM ( )AND X.INBOUND_QTY NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B WHERE A.NUM = B.NUM   
  说明:--
  SQL:
  select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩


[!--infotagslink--]

相关文章

  • c# 对CSV文件操作(写入、读取、修改)

    这篇文章主要介绍了c# 如何对CSV文件操作,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下...2020-11-03
  • JS双击变input框批量修改内容

    这篇文章主要介绍了JS双击变input框批量修改内容的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2017-01-09
  • 使用phpMyAdmin批量修改Mysql数据表前缀的方法

    多个网站共用一个Mysql数据库时,为使数据库管理不混乱,一般采用不同的网站使用不同前缀名的方式进行区分。而如何批量修改已有数据库的前缀名呢?全部导出修改后再导入?还是一个表一个表的修改?今天我要介绍的是相对简单的...2015-10-21
  • vue实现在进行增删改操作后刷新页面

    这篇文章主要介绍了vue实现在进行增删改操作后刷新页面,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
  • C#设置自定义文件图标实现双击启动(修改注册表)

    这篇文章介绍的是利用C#设置自定义文件图标,然后实现双击启动的功能,文章给出了示例代码,介绍的很详细,有需要的可以参考借鉴。...2020-06-25
  • 利用C#修改Windows操作系统时间

    这篇文章主要介绍了利用C#修改Windows操作系统时间,帮助大家更好的利用c#操作系统,感兴趣的朋友可以了解下...2020-12-08
  • JQuery EasyUI学习教程之datagrid 添加、修改、删除操作

    这篇文章主要介绍了JQuery EasyUI datagrid 添加、修改、删除操作的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-07-25
  • mysql修改表结构方法实例详解

    本文实例讲述了mysql修改表结构方法。分享给大家供大家参考。具体如下:mysql修改表结构使用ALTER TABLE语句,下面就为您详细介绍mysql修改表结构的语句写法,希望对您学习mysql修改表结构方面能有所帮助。ALTER [IGNORE]...2015-10-21
  • .htaccess的基本作用及相关语法介绍

    一、.htaccess的基本作用 启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用 如果需要使用.htaccess以外的其他文件名,可以用Ac...2016-01-28
  • C#实现appSettings节点读取与修改的方法

    这篇文章主要介绍了C#实现appSettings节点读取与修改的方法,是非常实用的技巧,需要的朋友可以参考下...2020-06-25
  • Mybatis批量修改时出现报错问题解决方案

    这篇文章主要介绍了Mybatis批量修改时出现报错问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-10
  • C#实现修改系统时间的方法

    这篇文章主要介绍了C#实现修改系统时间的方法,是一个非常实用的功能,需要的朋友可以参考下...2020-06-25
  • 怎么限制Apache日志文件大小(error.log、access.log)

    如何删除error.log、access.log文件以及限制Apache日志文件大小的方法介绍,Apache服务器下access.log以及error.log日志文件一直没有没有动过,今天wordpress 的MYSQL数据库连...2016-01-28
  • vbs小程序图标更改方法的实现

    这篇文章主要介绍了vbs小程序图标更改方法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
  • Jquery easyui开启行编辑模式增删改操作

    jquery easyui框架提供了创建网页所需要的一切,可以帮助大家建立站点,接下来,通过本文给大家介绍Jquery easyui开启行编辑模式增删改操作,感兴趣的朋友一起学习...2016-01-15
  • python批量修改交换机密码的示例

    这篇文章主要介绍了python批量修改交换机密码的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...2020-09-22
  • C#处理Access中事务的方法

    这篇文章主要介绍了C#处理Access中事务的方法,涉及C#中事物的实现及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 整理的 .htaccess 常用的用法大全

    重新和重定向  注意:首先需要服务器安装和启用mod_rewrite模块。  强制 wwwRewriteEngine onRewriteCond %{HTTP_HOST} ^example\.com [NC]RewriteRule ^(.*)$ http://ww...2016-01-28
  • 安卓手机怎么修改充电提示音 充电提示音更换方法一览

    安卓手机充电提示音怎么添加更换呢?很多朋友最近对于充电提示音非常感兴趣,想要更换自己安卓手机的提示音但是不知道怎么操作,那么今天小编就为大家带来关于充电提示音更换方法...2020-12-08
  • apache中htaccess 301跳转设置汇总

    1.重定向www.111cn.net 到 www.111cn.net 打开.htaccess文件,加入以下规则。 代码如下 复制代码 RewriteEngine On RewriteCond %{HTTP_HOST} !^www....2016-01-28