当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server数据在不同数据库中的应用

MSSQL
SQLSERVER 中datetime 和 smalldatetime类型分析说明
数据库清除日志文件(LDF文件过大)
按日期选择最晚日期与最早日期对应的数的差值
sql 时间函数 整理的比较全了
SQL Server全文检索查询浅析
SQL 存储过程基础语法之一
SQL Substring提取部分字符串
用户"sa"登陆失败 SQLServer 错误18456的解决方法
MSSQL 检查所使用的语句是否符合标准
drop,truncate与delete的区别
SQL语句查询数据库中重复记录的个数
SQL 导入导出Excel数据的语句
可以获取客户端的IP地址的sql语句
SQL 根据汉字获取全拼的代码
sqlserver exists,not exists的用法
sqlserver substring函数使用方法小结
sql 判断数据库,表,存储过程等是否存在的代码
做购物车系统时利用到得几个sqlserver 存储过程
Sql2000数据库的备份文件恢复到Sql2005的方法
sql 分组查询问题

MSSQL 中的 SQL Server数据在不同数据库中的应用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 36 ::
收藏到网摘: n/a

在软件开发的初始阶段,开发商们总是想把整个系统的最小的细节设计好了,然后再去单线程的编写代码。这样软件开发完成需要很长时间,但开发商们一直都在这么做。

所以开发者不得不去缩小他们的野心,先设计好一个小系统,然而这个小系统只是解决了整个系统难题中的一部分。这导致了由不同的团队设计和创建的许多小系统几乎都不能相互之间兼容。

目前,许多组织都聘请了数据库建模者或者DBA,这些人能监督数据库设计和开发。不幸的是,那些组织只有在出现某些状况后,才会意识到在他们的员工中需要这样的人。

数据建模者和DBA面对的一个非常普遍的问题就是,如何在不同的数据库中解析SQL数据。本文将通过一个可靠的方法来说明这个问题。

一个实例

在这个实例方案中,有两个包含相似数据的数据库:一个使用术语OrderNumber,另一个使用术语OrderNo。第一个数据库有关键字而第二个数据库没有。

首先,你会在两个数据库中发现它们的顺序是相似的。清单A创建了两个数据库(Test_Cross_1和Test_Cross_2),每个数据库中有一个表(分别是Orders_1和Orders_2)。

假设Orders_1包括这些行:

OrderNumberOrderDate

2007-02-23 00:00:00.000

2007-02-24 00:00:00.000

2007-02-25 00:00:00.000

假设Orders_2包括这些行:

OrderNo  OrderDate

2007-02-23 00:00:00.000

2  2007-02-24 00:00:00.000

2007-02-24 00:00:00.000

3011 2007-02-25 00:00:00.000

一旦你明白了如何引用表SQL执行合并操作是很简单的。简而言之,你要有合法的名字。如清单B所示。这将不会成功,因为Order_2包括一行Order_1没有的数据。改变连接,加入对外连接符也不会成功,就像你在清单C中看到的那样。第二个查询得到跟第一个查询相同的结果,因为OrderNo 301不存在于第一个表中。找到这一行,你必须在第二个查询中,将这个表的顺序反转。如清单D。现在你就能发现不匹配的行了。

OrderNo   OrderDate   OrderNumberOrderDate

1   2007-02-23 00:00:00.0001  2007-02-23 00:00:00.000

2   2007-02-24 00:00:00.0002  2007-02-24 00:00:00.000

2007-02-24 00:00:00.000 NULL NULL

2007-02-25 00:00:00.0003 011 2007-02-25 00:00:00.000

假设有一些行存在于Order_1中而不存在于Order_2中。你将上面的查询翻转,它也能工作,然而,随后你会得到两个查询和两个结果集,并结束你的查询,这些你都必须手动比较。如果每个表只有四行,这是不困难的,但是想象一下如果有4,000行记录的话,怎么使用这种不切实际的方法进行比较呢。你必须对两个表的每行没出现在另外那张表的记录进行检查。

CREATE DATABASE [Test_Cross_1] ON PRIMARY

( NAME = N'Test_Cross_1', FILENAME = N'

C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDATATest_Cross_1.mdf',

SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

LOG ON ( NAME = N'Test_Cross_1_log',

FILENAME = N'C:aProgram FilesMicrosoft

SQL ServerMSSQL.1MSSQLDATATest_Cross_1_log.ldf',

SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO

USE [Test_Cross_1]

GO

CREATE TABLE [dbo].[Orders_1]

( [OrderNumber] [int] NOT NULL,

[OrderDate] [datetime] NOT NULL,

CONSTRAINT [PK_Orders_1] PRIMARY KEY CLUSTERED

( [OrderNumber] ASC)WITH (PAD_INDEX = OFF,

STATISTICS_NORECOMPUTE = OFF,

IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

CREATE DATABASE [Test_Cross_2] ON PRIMARY

( NAME = N'Test_Cross_2',

FILENAME = N'C:Program FilesMicrosoft

SQL ServerMSSQL.1MSSQLDATATest_Cross_2.mdf',

SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

LOG ON ( NAME = N'Test_Cross_2_log',

FILENAME = N'C:Program FilesMicrosoft

SQL ServerMSSQL.1MSSQLDATATest_Cross_2_log.ldf',

SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO

CREATE TABLE [dbo].[Orders_2]

( [OrderNo] [int] NOT NULL, [OrderDate] [datetime]

NOT NULL CONSTRAINT [DF_Orders_2_OrderDate]

DEFAULT (getdate()), CONSTRAINT [PK_Orders_2]

PRIMARY KEY CLUSTERED ( [OrderNo] ASC)WITH

(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,

IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

清单A

SELECT * FROM Test_Cross_1.dbo.Orders_1INNER

JOIN Test_Cross_2.dbo.Orders_2

ON Test_Cross_1.dbo.Orders_1.OrderNumber

清单B

SELECT * FROM Test_Cross_1.dbo.Orders_1LEFT OUTER

JOIN Test_Cross_2.dbo.Orders_2

ON Test_Cross_1.dbo.Orders_1.OrderNumber

清单C

SELECT * FROM Test_Cross_2.dbo.Orders_2LEFT OUTER

JOIN Test_Cross_1.dbo.Orders_1

ON Test_Cross_2.dbo.Orders_2.OrderNo

清单D