Archive for the ‘database’ Category

SQLServer中多表删除的技巧

Posted by 机器人 on 26th 七月 2007 in database

为了实现一个简单的删除,折腾了我一上午.情况如下:

我有两张表,一张是车辆信息表(LOG_Vehicle_Info),一张是车辆附加信息表(LOG_Vehicle_Extra_Info)表.在车辆信息表里,每一条记录都有在车辆附加信息表里有着一一对应的附加信息.他们之间的关系是一对一的关系.车辆附加信息PK为EV_Id,在车辆信息表中有FK(EV_Id).

现在需要对特定的车辆信息进行删除,当然,该信息所对应的附加信息也得要删除才行.

原始方法:

为了删除附加信息表中记录,我们需要知道附加信息的ID编号,但这个编号我们只能通过车辆信息表才能找到,所以实现方法如下:

通过车辆号码(车辆信息表的PK)查询出需要删除的车辆的附加信息ID编号(EV_ID),然后做两次删除.因为现在我们知道了附加信息表的的主键EV_Id.

为了实现删除这一操作,我需要向数据库执行一次查询,然后通过查询的结果作为条件进行两次的数据库删除,为了得到查询结果,C++代码就有好几行,所以这种方法不但麻烦而且效率还不高.

最新方法:

介绍这种方法之前,需要说明一下外键的概念,"外键主要功能是为了加强两表中的一行或者多行之间的联系,数据库中,它使数据保持完整性,即:同一数据,在不同的地方引用,当这一数据作相关的改变后,那么引用他的所有数据都会自动同步.",所以有了外键就好办多了,而且这一切都是数据库系统自动完成的,不需要我们过多的干预.

这里我的思想是,由于车辆附件信息表中的主键EV_Id是车辆信息表中的外键,那么只要删除了车辆附加信息表中的内容,那么所有在车辆信息表中引用该记录的行将会被数据库系统自己删除.

SQL语句如下:

 

DELETE
	[LOG_Vehicle_Extra_Info]//注意是删除车辆附加信息表,而不是车辆信息表
FROM
	[LOG_Vehicle_Info]
WHERE
	LOG_Vehicle_Info.EV_Id = LOG_Vehicle_Extra_Info.EV_Id
AND
	LOG_Vehicle_Info.Vehicle_CardNo= 'vvv'

 

 删除车牌号为vvv的车辆信息.

要注意这里的语法:

DELETE
	[LOG_Vehicle_Extra_Info]//注意是删除车辆附加信息表,而不是车辆信息表
FROM

我们删除车辆附加信息表,这样,一旦在车辆信息表中的外键EV_Id的记录不存在的话,那么数据库系统将会自己删除该记录.如果我们

DELETE
	[LOG_Vehicle_Info]//是删除车辆信息表,而不是车辆附加信息表
FROM

这样写,那么我们只是删除了车辆信息表中的记录,而它所对应的附加信息依然存在,由于我们只是删除引用附加信息的表的记录,而不是删除了附加信息的记录,因为这里并没有破坏数据的完整性定义,所以数据库系统不会去删除附加信息表的.

技巧:在们删除多表时,我们只需要删除关联数据表,那么所有引用此关联数据表所对应表的记录将会被系统自动删除.

机器人 2007年7月26日 于 北京 (困死了,马上就去睡午觉)

microsoft sql server (mssql)数据导入导出详解 (多图文档)

Posted by 机器人 on 3rd 七月 2007 in database

本文内容包括。

(1) 注册远程SQL服务器到本地

(2) 执行数据的导入导出功能

(3) 注册服务器不成功的处理

一。打开 企业管理器 (Enterprise Manager) 工具

二。将一个远程sql服务器注册到本地管理。新建一个SQL server注册

三。

四。

五。

六。

七。

八。

九。

十。

(2) 数据的导入导出功能

一。导入数据,意指将从本地库里把数据导进入到指定的库里。

导出数据,意指将指定的库里的数据导出到本地的库里。

二。选者一个数据库源,意指从何处复制数据到新的库里。

三。指定一个目的库,意指将数据导入哪里去。

四。

五。

六。

七。

八。

九。

(3)注册服务器不成功的处理。(在网络不是很顺畅的时候,可以加大服务器连接超时时间)

1。

2。

来源:网络

Create a Database Model or Entity Relationship Diagram

Posted by 机器人 on 2nd 七月 2007 in database
  1. To start your database model diagram, do one of the following:
  2. HideCreate a new model diagram from scratch

    HideUse a reverse engineered model diagram as a starting point

    HideImport and refine an existing model

  3. Once you start a database model diagram, the real work of refining it begins. You can add
  4. HideTables

    HideColumns

    HideForeign key relationships

    HideData types

    HideTip

  5. To make other refinements to your diagram, you can
  6. HideCreate indexes

    HideCreate views

    HideSet extended properties for tables and views

  7. You can also add code for the following:
  8. HideCheck clauses

    HideStored procedures

    HideTriggers

  9. If the physical database was changed after you reverse engineered it, you can update your diagram to reflect those changes.

把拷贝过的SQL Server 数据库恢复的正确方法

Posted by 机器人 on 19th 六月 2007 in database

在SQL Server 7中由于MS重新设计了数据库文件的存储方式,取消了新建设备再建数据库这一繁琐的过程。新的存储格式,一个数据库包括两个文件,mdf数据库文件和 ldf日志文件。所以我们在重装机器备份时可以把你要备份的数据库的这两个文件拷贝出来,重新安装之后再恢复。

在SQL Server中提供了这种恢复方式的存储过程。

1.sp_attach_db [

在SQL Server 7中由于MS重新设计了数据库文件的存储方式,取消了新建设备再建数据库这一繁琐的过程。新的存储格式,一个数据库包括两个文件,mdf数据库文件和 ldf日志文件。所以我们在重装机器备份时可以把你要备份的数据库的这两个文件拷贝出来,重新安装之后再恢复。

在SQL Server中提供了这种恢复方式的存储过程。

1.sp_attach_db [@dbname =] ’dbname’,[@filename1 =] ’filename_n’

给系统添加一个数据库,在dbname指定数据库名称,filename_n指定数据库的文件和日志文件。比如我有一个voogiya的库,停止SQL Server服务备份voogiya_data.mdf,voogiya_log.ldf,启动SQL server,删除掉这个库,然后再把这两上文件拷到sql server DATA目录中,在Query Analyzer中执行如下语句:

EXEC sp_attach_db @dbname = N’voogiya’,

@filename1 = N’d:\mssql7\data\voogiya_data.mdf’,

@filename2 = N’d:\mssql7\data\voogiya_log.ldf’

就会把这个库加入到SQL Server Group中.

2.sp_attach_single_file_db [@dbname =] ’dbname’,

[@physname =] ’physical_name’

这个命令和上面的功能一样,在physical_name中只要写上据库的物理文件名就可以了,日志文件SQL server会重新建立。这个存储过程的运行要先执行下面的存储过程:

sp_detach_db @dbname = ’dbname’

同样以上面的为例:

EXEC sp_detach_db @dbname = ’voogiya’

EXEC sp_attach_single_file_db @dbname = ’voogiya’,

@physname = ’d:\mssql7\data\voogiya_data.mdf’

要注意执行以上存储过程的用户要在sysadmin中.

以上方法在windows Nt 4.0,service pack5,sql server 7.0上运行通过。

sql数据库准备还原时却出了错,提示是:"设备激活错误……请使用WITH MOVE…

Posted by 机器人 on 5th 六月 2007 in database

一台机器上备份了一个数据库,把备份后的文件打击拷到另一台机器上准备还原时却出了错,提示是:"设备激活错误,物理文件名:d:\program files\microsoft sqlserver\MSSQL\finance_data.mdf"可能有误.文件finance_DATA无法还原为d:\program files\microsoft sqlserver\MSSQL\finance_data.mdf.请使用WITH MOVE 选项来标识该文件的有效位置…"

解决方法:

目录不对

–解决第一个问题的详细步骤:

1.企业管理器中的方法:

–右键"数据库"

–所有任务

–还原数据库

–"还原为数据库库"中输入还原后的数据库名

–还原选择"从设备"–选择设备–添加–添加你的备份文件–确定,回到数据库还原的界面

–备份号–选择内容–选择你要恢复那次备份的内容

–选项–将"移至物理文件名"中的物理文件名修改为你的数据文件要存放的文件名

–如果要还原的数据库已经存在,选择"在现有数据库上强制还原"-

-确定

2.用SQL语句的方法(假设你的备份文件名为: c:\xx.bak

–列出备份文件中的逻辑文件名

restore filelistonly from disk='c:\xx.bak'

–用语句恢复,根据上面列出的逻辑文件名使用move选项

restore database 恢复后的数据库名
from disk='c:\xx.bak'
with move '逻辑数据文件名1' to 'c:\物理数据文件名1'
,move '逻辑数据文件名2' to 'c:\物理数据文件名2'
...
,move '逻辑数据文件名n' to 'c:\物理数据文件名n'

 

例如:

 

restore database automis
from disk='d:\autoback'
with move 'autoshool_Data' to 'D:\Program Files\Microsoft SQL Server\MSSQL\data\automis_Data.MDF'
,move 'autoshool_Log' to 'D:\Program Files\Microsoft SQL Server\MSSQL\data\automis_Log.LDF'

ODBC组成部分以及相互关系

Posted by 机器人 on 3rd 六月 2007 in database

ODBC(Open DataBase Connectivity,开放数据库互连)是微软公司开放式服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,关提供了一组对数据库访问的标准API(应用程序编程接口).这些API利用SQL来完成其大部分任务.ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句付给ODBC

ODBC的结构是建立在客户机/服务器(C/S)体系结构之上,它包含如下4部分.

 

1.      应用程序(Application

应用程序即用户的应用,它负责用户与用户接口之间的交互操作,调用ODBC函数以给出SQL请求并提取结果以及进行错误处理.

2.      ODBC驱动程序管理器(Driver Manager

ODBC驱动程序管理器可以为应用程序加载和调用驱动程序,它可以同时管理多个应用程序和多个驱动程序.它的功能是通过间接调用函数和使用动态链接库(DLL)来实现,因此它一般包含在扩展名为”DLL”的文件中.

3.      ODBC驱动程序(Driver).

ODBC驱动程序执行ODBC函数调用,呈送SQL请求给指定的数据源,并将结果返回给应用程序.驱动程序也负责访问数据源的必要软件层交互,软件层包括与底层网络或文件系统接口的软件.

4.      数据源.

数据源由数据集和与其相关的环境组成,包括操作系统、包括操作系统、DBMS和网络(如果存在).ODBC通过引入"数据源"的概念解决了网络拓扑结构和主机的大范围差异问题,这样,用户看到的是数据源的名称而不必关心其内容.

ODBC结构各部分之间的关系图如下:

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC写具体数据库的联系,这样,只要应用程序将数据源名提供给ODBCODBC就能建立起写相应数据库的连接.

ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息.驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行相应的操作后,将结果通过驱动管理器返回给应用程序.

 

200763 机器人于 北京 (学习整理)