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

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

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

目前,许多组织都聘请了数据库建模者或者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

时间: 2024-08-03 04:35:43

解析SQL Server数据应用在不同的数据库中的相关文章

SQL Server数据复制到的Access两步走_MsSql

我们今天主要向大家讲述的是把SQL Server数据复制到的Access数据库中的实际操作步骤,把SQL Server数据库中的某些数据复制到的Access数据库中,其表的主要结构是相同的,不要提用openrowset,因为Access文件和SQL Server不在一台机器上. 初步的想法是用两个recordset,一个从SQL取数据,一个往Access里面插入数据 因为表的字段比较多,所以只好用一个循环 while (!m_pRecordset_sql->adoEOF) { m_pRecord

深入解析SQL Server并行执行原理及实践(上)

在成熟领先的企业级数据库系统中,并行查询可以说是一大利器,在某些场景下它可以显著地提升查询的相应时间,提升用户体验.如SQL Server.Oracle等, MySQL目前还未实现,而PostgreSQL在2015实现了并行扫描,相信他们也在朝着更健壮的企业级数据库迈进.RDBMS中并行执行的实现方式大抵相同,本文将通过SQL Server为大家详细解析SQL Server并行执行的原理及一些实践.   1准备知识    硬件环境--在深入并行原理前,我们需要一些准备知识,用以后面理解并行.  

ASP实现备份sql server数据

server|sql|备份|数据 建个bak文件夹啊,放数据! db.asp代码如下: <%dim conndim connstr'on error resume nextset conn=server.CreateObject("adodb.connection")connstr="Provider=SQLOLEDB;data source=192.168.2.1;UID=sa;Pwd=123;DataBase=test"conn.Open connstr

如何将SQL Server数据迁移到MySQL

一.背景 由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL:由于涉及的表比较多,所以想在MySQL中生成对应表并导入数据: 上网找了些资料,如:将ACCESS和MSSQL导入MYSQL中.MySQL Migration 实现 MSSQL 到 MySQL数据迁移,虽然不知道里面的做法是否可以成功转移,但是里面的过程比较复杂,没有去尝试,后来自己找到了方法,最重要就是简单和准确(暂时没发现明显的BUG),这里

使用SQL Server数据服务开发功能强大且可扩展的应用程序

本文使用了以下技术: SQL Server 本文将介绍以下内容: SSDS 数据模型 管理实体.容器和颁发机构 创建示例 Web 应用程序 类序列化和反序列化 本专栏基于 SQL Server 数据服务的预发布版本撰写而成.文中包含的所有信息均有可能发生变更. 目录 SSDS 数据模型 构建分类广告系统 添加城市 添加类别 更新和删除实体 添加和删除列表架构 分类 Web 应用程序 类反序列化 使用自定义列表架构

SQL Server数据体系和应用程序逻辑

在许多用SQL Server实现的新的企业系统设计中,系统设计师需要在给数据结构和管理应用程序逻辑的定位上做出具有关键性意义的决定.SQL Server有它自己的编程语言(Transact-SQL,即TSQL),开发者可以用它来管理数据访问.代码事务逻辑和交易控制. 使用TSQL,开发者可以创建保存过程,在保存过程中用一段可重用.预编译而且拥有自己的许可设置的代码块来封装数据访问.数据库中每个表格都有一组叫做triggers的特殊的保存过程.当底层数据库发生特定的数据库事件(如Insert.De

sql server数据|sql server数据库入侵渗透~~求大神

问题描述 sql server数据|sql server数据库入侵渗透~~求大神 QQ200832005[招聘]渗透测试工程师(可兼职也可接私活) 技能要求 具有至少1年以上的职业黑客攻击经验,并实际操作过各类项目,拒绝理论派.熟悉渗透测试服务器提权方面. 1.掌握MySQL.MSSQL.Oracle.PostgreSQL等一种或多种主流数据库结构以及特殊性. 2.熟悉渗透测试的步骤.方法.流程.熟练掌握各种渗透测试工具. 3.有主机.网络或Web安全渗透测试相关项目实施经验&. 4.对网站/服

sqlserver-关于oracle向sql server数据迁移问题

问题描述 关于oracle向sql server数据迁移问题 请教各位大神怎么让这个接口程序出来呢 解决方案 在 SQL Server 服务器上要装 Oracle 的客户端,并且做好配置. 其实所有的数据库都需要有客户端才能访问,谁叫SQL Server是微软的呢,装系统的时候就偷偷地把客户端装上去了. 如果是一次性迁移,不如Oracle生成脚本,人工修改一下,到SQL Server中执行. 解决方案二: 可以参考一下这个链接 Microsoft OLE DB Provider for Orac

sql server- 求教一个SQL SERVER数据导入问题

问题描述 求教一个SQL SERVER数据导入问题 我有几个表的数据要导入,每个表大概50到500W数据,为了方便后面对表的数据处理,我会在表中创建组合非聚集索引,请问我在应该在导之前建还是导之后建?如果是导之后建,建起来也挺慢的,有什么方法快速创建吗 解决方案 导入之后建,建立索引需要遍历表,计算每个字段,添加到索引存储中,所以肯定耗时,不管先建还是后建.但是推荐后建. 解决方案二: 检查下并行度参数设置,或者修改sql代码如下 maxdop=8,online=on 解决方案三: 创建速度应该