IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類(lèi)|軟件專(zhuān)題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)MSSQL → SQL Server數(shù)據(jù)在不同數(shù)據(jù)庫(kù)中的應(yīng)用

SQL Server數(shù)據(jù)在不同數(shù)據(jù)庫(kù)中的應(yīng)用

時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

在軟件開(kāi)發(fā)的初始階段,開(kāi)發(fā)商們總是想把整個(gè)系統(tǒng)的最小的細(xì)節(jié)設(shè)計(jì)好了,然后再去單線(xiàn)程的編寫(xiě)代碼。這樣軟件開(kāi)發(fā)完成需要很長(zhǎng)時(shí)間,但開(kāi)發(fā)商們一直都在這么做。

所以開(kāi)發(fā)者不得不去縮小他們的野心,先設(shè)計(jì)好一個(gè)小系統(tǒng),然而這個(gè)小系統(tǒng)只是解決了整個(gè)系統(tǒng)難題中的一部分。這導(dǎo)致了由不同的團(tuán)隊(duì)設(shè)計(jì)和創(chuàng)建的許多小系統(tǒng)幾乎都不能相互之間兼容。

目前,許多組織都聘請(qǐng)了數(shù)據(jù)庫(kù)建模者或者DBA,這些人能監(jiān)督數(shù)據(jù)庫(kù)設(shè)計(jì)和開(kāi)發(fā)。不幸的是,那些組織只有在出現(xiàn)某些狀況后,才會(huì)意識(shí)到在他們的員工中需要這樣的人。

數(shù)據(jù)建模者和DBA面對(duì)的一個(gè)非常普遍的問(wèn)題就是,如何在不同的數(shù)據(jù)庫(kù)中解析SQL數(shù)據(jù)。本文將通過(guò)一個(gè)可靠的方法來(lái)說(shuō)明這個(gè)問(wèn)題。

一個(gè)實(shí)例

在這個(gè)實(shí)例方案中,有兩個(gè)包含相似數(shù)據(jù)的數(shù)據(jù)庫(kù):一個(gè)使用術(shù)語(yǔ)OrderNumber,另一個(gè)使用術(shù)語(yǔ)OrderNo。第一個(gè)數(shù)據(jù)庫(kù)有關(guān)鍵字而第二個(gè)數(shù)據(jù)庫(kù)沒(méi)有。

首先,你會(huì)在兩個(gè)數(shù)據(jù)庫(kù)中發(fā)現(xiàn)它們的順序是相似的。清單A創(chuàng)建了兩個(gè)數(shù)據(jù)庫(kù)(Test_Cross_1和Test_Cross_2),每個(gè)數(shù)據(jù)庫(kù)中有一個(gè)表(分別是Orders_1和Orders_2)。

假設(shè)Orders_1包括這些行:

OrderNumberOrderDate

2007-02-23 00:00:00.000

2007-02-24 00:00:00.000

2007-02-25 00:00:00.000

假設(shè)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執(zhí)行合并操作是很簡(jiǎn)單的。簡(jiǎn)而言之,你要有合法的名字。如清單B所示。這將不會(huì)成功,因?yàn)镺rder_2包括一行Order_1沒(méi)有的數(shù)據(jù)。改變連接,加入對(duì)外連接符也不會(huì)成功,就像你在清單C中看到的那樣。第二個(gè)查詢(xún)得到跟第一個(gè)查詢(xún)相同的結(jié)果,因?yàn)镺rderNo 301不存在于第一個(gè)表中。找到這一行,你必須在第二個(gè)查詢(xún)中,將這個(gè)表的順序反轉(zhuǎn)。如清單D?,F(xiàn)在你就能發(fā)現(xiàn)不匹配的行了。

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

假設(shè)有一些行存在于Order_1中而不存在于Order_2中。你將上面的查詢(xún)翻轉(zhuǎn),它也能工作,然而,隨后你會(huì)得到兩個(gè)查詢(xún)和兩個(gè)結(jié)果集,并結(jié)束你的查詢(xún),這些你都必須手動(dòng)比較。如果每個(gè)表只有四行,這是不困難的,但是想象一下如果有4,000行記錄的話(huà),怎么使用這種不切實(shí)際的方法進(jìn)行比較呢。你必須對(duì)兩個(gè)表的每行沒(méi)出現(xiàn)在另外那張表的記錄進(jìn)行檢查。

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

關(guān)鍵詞標(biāo)簽:SQL Server

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門(mén)文章 淺談JSP JDBC來(lái)連接SQL Server 2005的方法 淺談JSP JDBC來(lái)連接SQL Server 2005的方法 SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 sql server系統(tǒng)表?yè)p壞的解決方法 sql server系統(tǒng)表?yè)p壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫(kù)用戶(hù)、角色、架構(gòu)的關(guān)系 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫(kù)用戶(hù)、角色、架構(gòu)的關(guān)系

相關(guān)下載

    人氣排行 配置和注冊(cè)O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠(yuǎn)程備份(還原)SQL2000數(shù)據(jù)庫(kù) SQL2000數(shù)據(jù)庫(kù)遠(yuǎn)程導(dǎo)入(導(dǎo)出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫(kù)服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級(jí)到2000的正確操作步驟 sql server系統(tǒng)表?yè)p壞的解決方法 淺談JSP JDBC來(lái)連接SQL Server 2005的方法