



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、SQL Server2000 數(shù)據(jù)庫程序設(shè)計題庫1 你是一個數(shù)據(jù)公司的數(shù)據(jù)庫開發(fā)人員,你建立了一個用來存儲了 15 個不同的高中體育成績的統(tǒng)計數(shù)據(jù)庫, 50 個體育信息公司將 把這些信息發(fā)布在各自的 Web站點上,每個公司站點的數(shù)據(jù)排列和使用這些統(tǒng)計數(shù)據(jù)的格式是不同的。你要將數(shù)據(jù)打包傳送給公司,你將怎么做?a.使用包含 FOR XML選項的 SELECT語句提取數(shù)據(jù)。b.對 SELECT語句返回的數(shù)據(jù)使用 sp_makewebtask系統(tǒng)存儲過程來生成 HTML數(shù)據(jù)。c.C. 對數(shù)據(jù)庫輸出的數(shù)據(jù)建立數(shù)據(jù)轉(zhuǎn)換服務(wù)包,形成使用TAB界定符的文本文件。d.建立一個使用 SEL_DMO的應(yīng)用程序來提取
2、數(shù)據(jù)庫中的數(shù)據(jù),并將這些數(shù)據(jù)轉(zhuǎn)換到標準 EDI( electronic data interchange)文件。答案: A.解釋 : 這些數(shù)據(jù)將會在公司的網(wǎng)站發(fā)布。 XML是可擴展標示語言,包含結(jié)構(gòu)信息的文檔。 可擴展標示語言適合制作WEB文件。SQL 查詢結(jié)果可以是 XML文檔。直接執(zhí)行查詢或存儲過程也可以生成XML文檔。使用帶 FORXML的子句的 SELECT語句可以直接生成 XML文檔。在 FORXML子句中 XML 的模式可以通過參數(shù) T RAW, AUTO, 或 EXPLICIT 來指定 .不正確的答案 :B: sp_makeweb 儲存程序用來生成 HTML 格式文檔而不是的標準
3、記錄集。 XML 是比 HTML更復雜的格式的文檔,在這種情形中 XML更合適。C: 一個用制表符分隔的文件,可以在任何支持用制表符分隔的文件的電子表格(如 Microsoft Excel )中進行分析。然而 , 這個格式對網(wǎng)頁是不適當?shù)?。D: SQL- DMO 不能生成在網(wǎng)站分布的數(shù)據(jù)。注意 : SQL- DMOSQL 分布式管理對象 (SQL-DMO) 封裝 Microsoft? SQLServer? 2000 數(shù)據(jù)庫中的對象。 SQL-DMO允許用支持自動化或 COM 的語言編寫應(yīng)用程序,以管理 SQL Server 安裝的所有部分。 SQL-DMO是 SQL Server 2000 中
4、的 SQLServer 企業(yè)管理器所使用的應(yīng)用程序接口 (API) ;因此使用 SQL-DMO的應(yīng)用程序可以執(zhí)行 SQL Server 企業(yè)管理器執(zhí)行的所有功能。SQL-DMO用于必須包含 SQL Server 管理的任何自動化或 COM 應(yīng)用程序,例如:封裝 SQL Server 作為自己的數(shù)據(jù)存儲并想盡量減少用戶的 SQL Server 管理任務(wù)的應(yīng)用程序。在程序本身并入了專門的管理邏輯的應(yīng)用程序。想在自己的用戶界面中集成SQL Server管理任務(wù)的應(yīng)用程2 你是一個郵購公司的數(shù)據(jù)庫開發(fā)人員,公司有兩臺使用SQL Server2000 的計算機,分別為 CORP1和 CORP2。CORP
5、1是一臺聯(lián)機事務(wù)處理服務(wù)器, CORP2存儲銷售歷史數(shù)據(jù)。 CORP2作為一臺連接服務(wù)器已連接到 CORP1上。銷售部經(jīng)理要求你建立一個購買軟盤的客戶的列表, 這個列表將每個月產(chǎn)生一次郵購的獎品, 軟盤在數(shù)據(jù)庫中的類別 ID 為 21。你必須從 SalesHistory 表中刷新這個信息,這個文件存儲在 CORP2的一個數(shù)據(jù)庫上,你要從 CORP1上執(zhí)行這個查詢,你將使用哪條腳本語句查詢?AEXEC sp_addlinkedserverCORP2,SQL Server GOB. SELECT CustomerID FROM OPENROWSETSQLOLEDB(, CORP2;p*word,S
6、ELECTWHERECategoryID =21)C. SELECTCustomerIDFROMWHERECategoryID = 21D. EXEC sp_addserver CORP2GO答案: C.解釋 : 對于這種情況,只要一個簡單的帶 WHERE子句 SELECTFROM語句即可,一般格式:SELECT CustomerID FROM SalesHistoryWHERE CategoryID = 21但是 SalesHistory 表在另一臺服務(wù)器上, 并且已經(jīng)建立了另一臺服務(wù)器的連接,可以直接執(zhí)行分布查詢,必須使用對象的四部分名稱:服務(wù)器、數(shù)據(jù)庫、所有者和表名,即。注 : sp_l
7、inkedserver使用 sp_linkedserver建立服務(wù)器連接 ,語法為 :sp_addlinkedserver server = 'server' , srvproduct = 'product_name' , provider = 'provider_name' , datasrc = 'data_source' , location = 'location' , provstr = 'provider_string' , catalog = 'catalog' 不正確
8、答案 :A: 已建立服務(wù)器連接,不要再建立服務(wù)器連接B: 對于已建立連接的服務(wù)器, 一般不用 OPENROWSET訪問。當訪問鏈接服務(wù)器中的表時, OPENROWSET訪問方法是一種替代方法,并且是一種使用OLE DB 連接并訪問遠程數(shù)據(jù)的一次性的、特殊的方法。D: sp_addserver是一個非法存儲過程名3 你是 Trey Research 公司的一個數(shù)據(jù)庫開發(fā)者。你設(shè)計了兩個事務(wù)用來輸入職員的相關(guān)數(shù)據(jù)到公司的數(shù)據(jù)庫中。 一個事務(wù)插入職員名字和地址到數(shù)據(jù)庫中,這個事務(wù)很重要。 另一個事務(wù)插入職員人口統(tǒng)計的其他數(shù)據(jù)項,這個事務(wù)不很重要。在訪問高峰時, 數(shù)據(jù)庫管理人通知你數(shù)據(jù)庫伺候器有時候會
9、出現(xiàn)錯誤。 每當發(fā)生錯誤時 , 數(shù)據(jù)庫伺候器隨機地結(jié)束一個事務(wù)。你一定保證當數(shù)據(jù)庫伺候器結(jié)束一個事務(wù)時 , 它從不結(jié)束比較重要的事務(wù)。 你應(yīng)該做什么 ?A重要事務(wù)的 DEADLOCK_PRIORITY級別設(shè)置低B不重要事務(wù)的 DEADLOCK_PRIORITY級別設(shè)置低C增加一段條件代碼,檢查重要事務(wù)的服務(wù)器返回的錯誤代號是否為1205,若是重新啟動該事務(wù)D在事務(wù)的 SQL操作語句中增加ROWLOCK優(yōu)化提示E把重要事務(wù)的事務(wù)隔離級別設(shè)置為SERIALIZABLE答案: B解釋 : 現(xiàn)在是一個死鎖的問題,并且隨機終止一個事務(wù)?,F(xiàn)在有兩類事務(wù):重要事務(wù)和不重要事務(wù)問題要求當死鎖的問題發(fā)生時,要終
10、止不重要事務(wù)而重要事務(wù)一定不要終止。通過把不重要事務(wù)的 DEADLOCK_PRIORITY級別設(shè)置低,當在兩個事務(wù)間發(fā)生死鎖時,不重要事務(wù)首先成為犧牲品,而重要事務(wù)沒有被終止。死鎖 :當某組資源的兩個或多個線程之間有循環(huán)相關(guān)性時,將發(fā)生死鎖。死鎖是一種可能發(fā)生在任何多線程系統(tǒng)中的狀態(tài), 而不僅僅發(fā)生在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中。多線程系統(tǒng)中的一個線程可能獲取一個或多個資源(如鎖)。如果正獲取的資源當前為另一線程所擁有, 則第一個線程可能必須等待擁有線程釋放目標資源。這時就說等待線程在那個特定資源上與擁有線程有相關(guān)性。如果擁有線程需要獲取另外一個資源,而該資源當前為等待線程所擁有,則這種情形將成為死鎖
11、: 在事務(wù)提交或回滾之前兩個線程都不能釋放資源, 而且它們因為正等待對方擁有的資源而不能提交或回滾事務(wù)。 例如,運行事務(wù) 1 的線程 T1具有 Supplier 表上的排它鎖。運行事務(wù) 2 的線程 T2 具有 Part 表上的排它鎖,并且之后需要 Supplier 表上的鎖。事務(wù) 2 無法獲得這一鎖,因為事務(wù) 1 已擁有它。事務(wù) 2 被阻塞,等待事務(wù) 1 。然后,事務(wù) 1 需要 Part 表的鎖,但無法獲得鎖,因為事務(wù) 2 將它鎖定了。事務(wù)在提交或回滾之前不能釋放持有的鎖。因為事務(wù)需要對方控制的鎖才能繼續(xù)操作,所以它們不能提交或回滾。說明 死鎖經(jīng)常與正常阻塞混淆。當一個事務(wù)鎖定了另一個事務(wù)需要
12、的資源,第二個事務(wù)等待鎖被釋放。默認情況下, SQL Server 事務(wù)不會超時(除非設(shè)置了 LOCK_TIMEOUT)。第二個事務(wù)被阻塞,而不是被死鎖。在該插圖中,對于 Part 表鎖資源,線程 T1 在線程 T2 上具有相關(guān)性。同樣,對于 Supplier 表鎖資源,線程 T2 在線程 T1 上具有相關(guān)性。因為這些相關(guān)性形成了一個循環(huán),所以在線程 T1 和線程 T2 之間存在死鎖。不正確答案 :A: 如果一個事務(wù)的優(yōu)先級設(shè)置為低,當死鎖發(fā)生時,它首先成為犧牲品;因為重要事務(wù)要保留,所以該事務(wù)的級別不能設(shè)置為低C: 當一個事務(wù)的成為死鎖的犧牲品時, 服務(wù)器返回一個 1205 的錯誤代號;當重
13、要事務(wù)殺死后, 重啟該事務(wù), 這樣保證了該事務(wù)不會被終止, 缺點是這個方法不是最有效的,并且會影響性能,最好為選擇 BD: ROWLOCK優(yōu)化提示使用行級鎖,而不使用粒度更粗的頁級鎖和表級鎖E: 事務(wù)準備接受不一致數(shù)據(jù)的級別稱為隔離級別。隔離級別是一個事務(wù)必須與其它事務(wù)進行隔離的程度。 較低的隔離級別可以增加并發(fā), 但代價是降低數(shù)據(jù)的正確性。相反,較高的隔離級別可以確保數(shù)據(jù)的正確性, 但可能對并發(fā)產(chǎn)生負面影響。應(yīng)用程序要求的隔離級別確定了SQL Server使用的鎖定行為。注 : 隔離級別當鎖定用作并發(fā)控制機制時, 它可以解決并發(fā)問題。 這使所有事務(wù)得以在彼此完全隔離的環(huán)境中運行,但是任何時候
14、都可以有多個正在運行的事務(wù)??纱行允峭ㄟ^運行一組并發(fā)事務(wù)達到的數(shù)據(jù)庫狀態(tài), 等同于這組事務(wù)按某種順序連續(xù)執(zhí)行時所達到的數(shù)據(jù)庫狀態(tài)。SQL-92 隔離級別盡管可串行性對于事務(wù)確保數(shù)據(jù)庫中的數(shù)據(jù)在所有時間內(nèi)的正確性相當重要, 然而許多事務(wù)并不總是要求完全的隔離。 例如,多個作者工作于同一本書的不同章節(jié)。新章節(jié)可以在任意時候提交到項目中。但是,對于已經(jīng)編輯過的章節(jié),沒有編輯人員的批準, 作者不能對此章節(jié)進行任何更改。 這樣,盡管有未編輯的新章節(jié),但編輯人員仍可以確保在任意時間該書籍項目的正確性。 編輯人員可以查看以前編輯的章節(jié)以及最近提交的章節(jié)。事務(wù)準備接受不一致數(shù)據(jù)的級別稱為隔離級別。 隔離級別
15、是一個事務(wù)必須與其它事務(wù)進行隔離的程度。 較低的隔離級別可以增加并發(fā), 但代價是降低數(shù)據(jù)的正確性。相反,較高的隔離級別可以確保數(shù)據(jù)的正確性, 但可能對并發(fā)產(chǎn)生負面影響。應(yīng)用程序要求的隔離級別確定了 SQL Server 使用的鎖定行為。SQL-92 定義了下列四種隔離級別,SQL Server 支持所有這些隔離級別:未提交讀(事務(wù)隔離的最低級別,僅可保證不讀取物理損壞的數(shù)據(jù))。提交讀( SQL Server 默認級別)??芍貜妥x??纱凶x(事務(wù)隔離的最高級別,事務(wù)之間完全隔離)。如果事務(wù)在可串行讀隔離級別上運行,則可以保證任何并發(fā)重疊事務(wù)均是串行的。下面四種隔離級別允許不同類型的行為。隔離級別
16、臟讀不可重復讀取幻像未提交讀是是是提交讀否是是可重復讀否否是可串行讀否否否事務(wù)必須運行于可重復讀或更高的隔離級別以防止丟失更新。 當兩個事務(wù)檢索相同的行,然后基于原檢索的值對行進行更新時, 會發(fā)生丟失更新。 如果兩個事務(wù)使用一個 UPDATE語句更新行,并且不基于以前檢索的值進行更新, 則在默認的提交讀隔離級別不會發(fā)生丟失更新。4 你是公司的 SQL Server 2000 聯(lián)機事務(wù)處理數(shù)據(jù)庫的數(shù)據(jù)庫開發(fā)人員。許多表有一百萬或更多的行, 所有的表都建立了一個聚集索引, 經(jīng)常存取的表另外還至少有一個非聚集索引, 數(shù)據(jù)庫服務(wù)器上有兩個 RAID陣列存儲數(shù)據(jù)文件, 你想設(shè)置表和索引以取得最佳的 I/
17、O 性能。你在每個 RAID陣列上建立了一個文件組,下一步你將作什么 ? a設(shè)置頻繁的互相連接的表加入同一個文件組,設(shè)置經(jīng)常存取的表和所有的屬于這些表的索引到另一個文件組。b設(shè)置頻繁的互相連接的表加入同一個文件組,設(shè)置經(jīng)常存取的表和所有的屬于這些表的非簇索引到不同的文件組。c設(shè)置頻繁的互相連接的表加入不同的文件組,設(shè)置經(jīng)常存取的表和所有的屬于這些表的非簇索引到不同的文件組。d設(shè)置頻繁的互相連接的表加入不同的文件組群,設(shè)置經(jīng)常存取的表和所有的屬于這些表的非簇索引到同一個文件組。答案: C.解釋 : 把頻繁訪問的表和它的索引存放在不同磁盤陣列的文件組, 可以提高數(shù)據(jù)庫的性能。因為這樣 可以使不同的
18、線程來訪問表和非聚集索引。 表和聚集索引不能分開存放到不同的文件組。 把經(jīng)常連接的表分開存儲到不同磁盤陣列也能提高數(shù)據(jù)庫的性能。 另外,創(chuàng)建和磁盤陣列數(shù)一樣多的文件個數(shù), 使得每個陣列上有一個文件,這樣也能提高性能。日志文件和數(shù)據(jù)文件分開存放到不同的磁盤陣列上也能提高性能。不正確答案:A: 經(jīng)常連接表存放到同一個文件組不能提高性能。 因為這樣不能并行處理。 另外只有非聚集索引才能和表分別存儲到不同文件組。B: 經(jīng)常連接表存放到同一個文件組不能提高性能。因為這樣不能并行處理D: 把表和非聚集索引存放到同一個文件組不能提高性能。因為這樣不能并行處理5 你是公司的 SQL Server2000 數(shù)據(jù)
19、庫開發(fā)人員,你修改了數(shù)據(jù)庫中用來建立銷售部月報表的幾個存儲過程, 存儲過程中包含了從三個或更多表中提取數(shù)據(jù)的復雜查詢,所有這些表都至少有一個索引。 用戶報告說這些月報表 比以前的版本的明顯要慢, 你要改進這些報表的性能,將怎么做?a. 對創(chuàng)建每個存儲過程的 DDL的腳本,使用這個腳本作為工作負載進行索引優(yōu)化。b. 在 SQL Profiler中捕捉每個存儲過程的執(zhí)行信息,使用這個信息文件作為工作負載進行索引優(yōu)化。c. 修改存儲過程中引用表的索引統(tǒng)計信息。d. 在 SQL查詢分析器中執(zhí)行每個存儲過程,使用e. 在 SQL查詢分析器中執(zhí)行每個存儲過程,使用Show Execution Plan選項
20、。Show Server Trace選項。答案: E.解釋 :通過查看服務(wù)器跟蹤來分析和優(yōu)化存儲過程。 使用 " 顯示服務(wù)器跟蹤 " 選項,可以顯示查詢對服務(wù)器到底有何影響,通過這些信息,來分析和優(yōu)化存儲過程。 Note: 查詢窗口跟蹤窗格" 顯示服務(wù)器跟蹤 " 命令提供了對信息的訪問, 此信息用于確定查詢對服務(wù)器方的影響。如果 " 顯示服務(wù)器跟蹤 " 命令在執(zhí)行查詢時啟用, 則該命令顯示跟蹤窗格, 此窗格提供有關(guān)事件類、子類、整型數(shù)據(jù)、文本數(shù)據(jù)、數(shù)據(jù)庫ID 、持續(xù)時間、啟動時間、讀、寫以及CPU 使用的信息。索引優(yōu)化向?qū)饕齼?yōu)化向?qū)?/p>
21、使您得以為Microsoft?SQL Server? 2000 數(shù)據(jù)庫選擇和創(chuàng)建優(yōu)化的索引集和統(tǒng)計信息集,而不需要深入了解SQL Server的數(shù)據(jù)庫結(jié)構(gòu)、工作負荷或內(nèi)部原理。為了生成適用的優(yōu)化索引集建議, 該向?qū)枰ぷ髫摵伞?工作負荷包含一個保存在文件或表中的 SQL 腳本或 SQL 事件探查器跟蹤,其中有 SQL 批處理或遠程過程調(diào)用 (RPC) 事件類以及 Event Class 和 Text 數(shù)據(jù)列。Incorrect answers:A: 索引優(yōu)化向?qū)褂霉ぷ髫撦d作為輸入,存儲過程的腳本不能作為其輸入SQL 語言主要有兩種:一種是數(shù)據(jù)定義語言(DDL) ,用于定義和管理SQL 數(shù)據(jù)
22、庫中的所有對象;另一種是數(shù)據(jù)操作語言 (DML) ,用于選擇、插入、更新和刪除使用 DDL 定義的對象中的數(shù)據(jù)。 Transact-SQL DDL 用于管理數(shù)據(jù)庫、表和視圖等對象,每個對象類通常都包含 CREATE、 ALTER和 DROP 語句,如 CREATE TABLE、ALTER TABLE和 DROP TABLE。DDL不能索引優(yōu)化向?qū)У妮斎隑:索引優(yōu)化可以提高存儲過程的的性能,但是沒有數(shù)據(jù)發(fā)生變化并且查詢很復雜。最好還是通過查看服務(wù)器跟蹤來發(fā)現(xiàn)問題。C: 選擇合適的索引和工作負載是很復雜、 耗時,對于中度復雜的數(shù)據(jù)庫和負載也有可能出錯。若想優(yōu)化索引,最好使用索引優(yōu)化向?qū)А: 執(zhí)行
23、計劃能夠提供一些線索, 說明存儲過程是怎樣執(zhí)行的。 一個執(zhí)行計劃只是說明對一個特殊的查詢查詢優(yōu)化器是怎樣優(yōu)化的。 這些信息是有用的, 它能用來優(yōu)化查詢的性能。然而執(zhí)行計劃不是分析復雜查詢的最好方法。6 你是一個國際進口商的數(shù)據(jù)庫開發(fā)人員,你正在創(chuàng)建數(shù)據(jù)庫,用來存儲訂購信息的,通過 C/S 模式的應(yīng)用程序輸入訂購數(shù)據(jù), 每當輸入一個新的定單, 要分配唯一的一個定單號, 定單號必須以遞增的方式簽發(fā), 平均每天有 10000 定單要輸入。你創(chuàng)建了一個 Orders 表,包含 OrderNumber 列,接下來你應(yīng)怎么做?A.把該列的數(shù)據(jù)類型設(shè)為 . uniqueidentifierB.把該列的數(shù)據(jù)類
24、型設(shè)為INT ,并設(shè)置具有 IDENTITY屬性C. 把該列的數(shù)據(jù)類型設(shè)為 INT ,并創(chuàng)建一個用戶函數(shù),該函數(shù)返回表中的最大定單號D.把該列的數(shù)據(jù)類型設(shè)為INT ,創(chuàng)建 NextKey 表,包含 NextOrder(INT)列,再創(chuàng)建一個存儲過程取出和更新NextKey 表中的數(shù)據(jù)。答案: B.解釋 :對任何表都可創(chuàng)建包含系統(tǒng)所生成序號值的一個標識符列, 該序號值唯一標識表中的一行。例如,當在表中插入行時, 標識符列可自動為應(yīng)用程序產(chǎn)生唯一的客戶收據(jù)號碼。標識符列在其所定義的表中包含的數(shù)值通常是唯一的。這意味著在包含標識符列的其它表中可使用與之相同的數(shù)值進行標識。一個表只能有一列定義為IDE
25、NTITY 屬性,而且該列必須以decimal 、int 、numeric 、smallint 、 bigint 或 tinyint數(shù)據(jù)類型定義。可指定種子和增量值。二者的默認值均為1 。標識符列不允許空值,也不能包含 DEFAULT定義或?qū)ο蟆T谠O(shè)置 DENTITY 屬性后,可以使用 IDENTITYCOL 關(guān)鍵字在選擇表中引用該列。不正確答案 :A: MS SQL Server 2000在復制表時使用 uniqueidentifier數(shù)據(jù)類型, 來保證列值的全球唯一性。使用 uniqueidentifier數(shù)據(jù)uniqueidentifier數(shù)據(jù)類型存儲 16字節(jié)的二進制值,該值的使用與全
26、局唯一標識符 (GUID) 一樣。 GUID 是一個唯一的二進制數(shù)字;世界上的任何兩臺計算機都不會生成重復的 GUID 值。 GUID 主要用于在擁有多個節(jié)點、多臺計算機的網(wǎng)絡(luò)中,分配必須具有唯一性的標識符。uniqueidentifier列的 GUID 值通常由以下方式獲得:在 Transact-SQL 語句、批處理或腳本中調(diào)用 NEWID函數(shù)。在應(yīng)用程序代碼中,調(diào)用返回 GUID 值的應(yīng)用程序 API 函數(shù)或方法。Transact-SQL NEWID 函數(shù)以及應(yīng)用程序API函數(shù)和方法從它們網(wǎng)卡上的標識數(shù)字以及 CPU 時鐘的唯一數(shù)字生成新的uniqueidentifier值。每個網(wǎng)卡都有唯
27、一的標識號。 由 NEWID返回的 uniqueidentifier使用服務(wù)器上的網(wǎng)卡生成。由應(yīng)用程序API函數(shù)和方法返回的uniqueidentifier使用客戶機上的網(wǎng)卡生成。一般不將 uniqueidentifier定義為常量,因為很難保證實際創(chuàng)建的uniqueidentifier具有唯一性。指定uniqueidentifier常量的方法有兩種:字符串格式'6F9619FF-8B86-D011-B42D-00C04FC964FF'二進制格式0xff19966f868b11d0b42d00c04fc964ff可以使用 NEWID()函數(shù)作為該字段的默認值C: 函數(shù)是由一個或
28、多個 Transact-SQL 語句組成的子程序,可用于封裝代碼以便重新使用。 Microsoft? SQL Server? 2000 并不將用戶限制在定義為Transact-SQL 語言一部分的內(nèi)置函數(shù)上,而是允許用戶創(chuàng)建自己的用戶定義函數(shù)??墒褂?CREATE FUNCTION語句創(chuàng)建、使用 ALTER FUNCTION語句修改、以及使用 DROP FUNCTION語句除去用戶定義函數(shù)。每個完全合法的用戶定義函數(shù)名( database_name. owner_name. function_name ) 必須唯一。必須被授予 CREATE FUNCTION權(quán)限才能創(chuàng)建、修改或除去用戶定義函數(shù)
29、。不是所有者的用戶在 Transact-SQL 語句中使用某個函數(shù)之前, 必須先給此用戶授予該函數(shù)的適當權(quán)限。若要創(chuàng)建或更改在 CHECK約束、 DEFAULT子句或計算列定義中引用用戶定義函數(shù)的表,還必須具有函數(shù)的 REFERENCES權(quán)限。在函數(shù)中,區(qū)別處理導致刪除語句并且繼續(xù)在諸如觸發(fā)器或存儲過程等模式中的下一語句的 Transact-SQL 錯誤。在函數(shù)中,上述錯誤會導致停止執(zhí)行函數(shù)。 接下來該操作導致停止喚醒調(diào)用該函數(shù)的語句。用戶定義函數(shù)的類型SQL Server 2000支持三種用戶定義函數(shù):標量函數(shù)內(nèi)嵌表值函數(shù)多語句表值函數(shù)D: 創(chuàng)建另外一個表用來跟蹤定單號,在這個例子中是不合適
30、的。7 你是一個技術(shù)培訓中心的數(shù)據(jù)庫開發(fā)人員,現(xiàn)在,行政人員在紙上記錄有學生、教師、課程和教室的安排數(shù)據(jù), 培訓中心想廢除紙張管理而改用數(shù)據(jù)庫來管理這些數(shù)據(jù),你設(shè)計了下列表,你想提高查詢反映時間和冗余數(shù)據(jù)降到最小 ,應(yīng)怎么辦?A.創(chuàng)建 Instructors表,包含 InstructorID、InstructorName和OfficePhone 列 。在 Courses 表中增加 InstructorID列B.把 Classroom 表中的所有列移到 Courses 表中,刪除 Classroom表C.把 Courses 表中主鍵約束刪除, 而用 CourseID 和 CourseTitle組
31、合主鍵代替D.刪除 ClassroomID 列,而建立 ClassroomNumber 和 ClassTime 主鍵約束。答案: A.解釋標準化數(shù)據(jù)庫是非常有效的,現(xiàn)在這個數(shù)據(jù)庫的設(shè)計是非標準化的,Courses 表中包含教師的數(shù)據(jù), 當一個教師有多余一門課時,就會有重復數(shù)據(jù),InstructorName和 OfficePhone要為每門課程登記。 這個數(shù)據(jù)庫的標準化設(shè)計應(yīng)該是:創(chuàng)建一個新的表Instructors該表中包含 InstructorID,作為候選主鍵在 Instructors表中增加 InstructorName和 OfficePhone刪除 Courses 表中 Instruc
32、torName和 OfficePhone列,在 Courses 表中增加 InstructorID列,作為外鍵,連接表Instructors中的InstructorID不正確答案 :B: 把 Classroom 表中的所有列移到 Courses 表中,只能使問題更糟糕,學生每選擇一門課,學生的數(shù)據(jù)就要輸入一次,數(shù)據(jù)庫將更不規(guī)范化。C: 把 Courses 表中的主鍵改為CourseID 和 CourseTitle的組合主鍵,數(shù)據(jù)庫將更不規(guī)范化。這樣將不能有兩門課有相同的CourseTitle,從而每年(學期)就要為課程起不同的名字。D: 改變 Classroom 的主鍵數(shù)據(jù)庫并不能得以改善,相
33、反,ClassroomID 將是冗余,此方法并沒有解決Courses 表中 InstructorName和 OfficePhone這兩列的問題。8 你將設(shè)計一個數(shù)據(jù)庫包括用戶定購。 用戶將在每次的定購大量的產(chǎn)品時設(shè)置一個序號, 可以在一個訂單中定購各種不同的產(chǎn)品。 具體建庫如下:現(xiàn)你需要 提高查詢速度和簡化多余數(shù)據(jù), 你應(yīng)該怎么處理? (各個正確答復提出一部分的解答。所以選擇 2 個選項)A. 創(chuàng)建新的定購表 OrderDetail 表。表中添加 OrderID , ProductID ,和Quantity列。B. 將 OrderID 和 ProductID 組成 Orders 表新的主鍵。仍
34、然有冗余且不佳C. 刪除 Orders 表中 ProductID 和 Quantity 列。D. 在 Orders 表格中創(chuàng)建唯一約束 OrderID 列。E. 將 Products 表中 UnitPrice 列移到 Orders 表內(nèi)。Answer: A , C.解釋:從一個邏輯的數(shù)據(jù)庫設(shè)計出發(fā),我們可以看到Orders 和 Products表的關(guān)系存在問題。我們希望兩表有如下的關(guān)系:每份定購將包括一個和多個產(chǎn)品。每個產(chǎn)品可以對應(yīng)0,1 或者多個序號簡言之, 我們在 Orders 和 Products表中要建立多對多的關(guān)系,但是SQL服務(wù)器不允許多對多的關(guān)系,所以我們必須建立聯(lián)系Orders
35、 和 Products 表的新表,通過兩個一對多的關(guān)系實現(xiàn)多對多關(guān)系。我們可以這么做:建新表 OrderDetail;在 OrderDetail表中添加 OrderID ,ProductID ,和 Quantity列。在 Orders 表中移除 Quantity 和 ProductID 列。在 OrderDetail 表中創(chuàng)建外鍵 OrderID 列,對應(yīng) Orders 表中的 OrderID 列。在 OrderDetail 表中創(chuàng)建外鍵 ProductID 列,對應(yīng) Products表中的 ProductID 列?,F(xiàn)在,可以更加規(guī)范數(shù)據(jù)庫。而且提高了查詢時間去掉多余數(shù)據(jù)。另外一種想法是:在本
36、事務(wù)中OrderID , ProductID和 Quantity列是必須優(yōu)先考慮的,因此創(chuàng)建一個新表是有益的。并且,可以把Quantity列從 Order 表中移除,以減少數(shù)據(jù)冗余。錯誤答案解析:B: 創(chuàng)建一個不涉及 OrderID 和 ProductID 列的主鍵并不好。作為一個合理的數(shù)據(jù)庫設(shè)計 ProductID 列并不能完全約束 Orders 表內(nèi)的 non-key 列,也不應(yīng)是主鍵的一部分。相反地, Orders 表將被一分為二。D: 在 Orders 表內(nèi)的 OrderID 列創(chuàng)建 UNIQUE約束,確保 OrderID 列的值是唯一的同時也阻止出現(xiàn)值為空。 但是并不解決 Order
37、s 和 Products 表的關(guān)系問題。E: 將 Product 表內(nèi)的 UnitPrice 列移到 Orders 表內(nèi)并不能解決問題。UnitPrice列記錄產(chǎn)品的價格是屬于Products 表,不能移到 Orders 表內(nèi)。唯一的方法是建立新表,以描述Products 和 Orders 表的關(guān)系。9 你是一個出版公司的數(shù)據(jù)庫開發(fā)人員,要查看特定的書名的每天的銷售情況,建立了如下的存儲過程:CREATE PROCEDURE get_sales_for_titletitle varchar(80), ytd_sales int OUTPUT ASSELECT ytd_sales = ytd_s
38、alesFROM titlesWHERE title = titleIF ROWCOUNT = 0RETURN (-1)ELSERETURN(0)另外建立了一個腳本執(zhí)行這個存儲過程, 如果執(zhí)行成功, 將返回對應(yīng)于該書的每天的銷售情況的報表,如果執(zhí)行失敗,將返回“ No Sales Found”,怎樣建立這個腳本?a. DECLARE retval int DECLARE ytd intEXEC get_sales_for_titleIF retval < 0PRINT No sales foundELSEPRINT Year to date sales:GONet Etiquette +
39、 STR (ytd), ytdb. DECLARE retval int DECLARE ytd intEXECget_sales_for_titleNet Etiquette, ytd OUTPUTIF retval < 0PRINT No sales foundELSEPRINT Year to date sales:GO+ STR (ytd)c. DECLARE retval int DECLARE ytd intEXEC get_sales_for_titleIF retval < 0PRINT No sales foundELSEPRINT Year to date sa
40、les:GONet Etiquette,retval OUTPUT + STR (ytd)d. DECLARE retval int DECLARE ytd intEXEC retval = get_sales_for_titleIF retval < 0PRINT No sales foundELSEPRINT Year to date sales:GONet Etiquette + STR (ytd ), ytd OUTPUT答案: D.解釋 : 這個存儲過程將返回對應(yīng)于書名的每天的銷售情況的報表,是一個RETURN存儲過程,我們必須在存儲過程執(zhí)行后,保存其返回值,在存儲過程外部是可
41、以使用的。該例中,在在存儲過程get_sales_for_title的第一行聲明的變量 retval是保存返回值的,存儲過程正確語法是:DECLARE返回值EXEC返回值 =存儲過程名稱Net Etiquette OUTPUT是書的標題,RETURN在該例中,正確的語法是:DECLARE retval intDECLARE ytdEXEC retval = get_sales_for_titleNet Etiquette, ytdOUTPUT不正確答案:A: 腳本的第 3 行,執(zhí)行存儲過程沒有輸出返回值B: 腳本的第 3 行,執(zhí)行存儲過程沒有輸出返回值C: 腳本的第 3 行,執(zhí)行存儲過程沒有輸
42、出返回值10你是一個集裝箱制造公司的數(shù)據(jù)庫開發(fā)人員, 公司制造的集裝箱有不同的尺寸和形狀,存儲的集裝箱 信息的表有 Size 、 Container 、 Shape,如圖所示。數(shù)據(jù)存儲在表中的例子如下圖所示。一般來說,集裝箱的尺寸周期性的改變, 數(shù)據(jù)庫的用戶需要知道集裝箱的容量,容量是基于 Shape、size 表中的數(shù)據(jù)計算得到的。 你要隱藏計算的細節(jié),使用一個 SELECT查詢可以方便的得到, 你將怎么做?A. 建立一個用戶定義的函數(shù),使用 ContainerID 作為參數(shù),返回集裝箱的容量。B. 建立一個存儲過程,使用 ContainerID 作為參數(shù),返回集裝箱的容量。C. 在 Con
43、tainer 表中加入名為 volume 的一列,當一個新集裝箱加入表中時,建立一個觸發(fā)器計算和存儲這列的值。D. 在 Container 表中加入一個計算過的列計算集裝箱的容量。正確答案: A解釋:被統(tǒng)計的列可以直接放置到查詢聲明中。我們這里想要掩藏演算的細節(jié),顯然我們掩藏演算通過定義一個用戶定義的計算函數(shù)。注意 1:用戶定義函數(shù)是SQL Server 2000. 的一大新特性該函數(shù)是一個有一個或多個 Transact-SQL 聲明的子程序,它可以用于壓縮代碼以重新使用。 CREATEFUNCTION語句來建立用戶定義函數(shù)。 ALTERFUNCTION來實現(xiàn)修改, the DROP FUNC
44、TION用于實現(xiàn)刪除。 SQL Server 2000 支持兩種類型的用戶定義函數(shù):標量函數(shù)。該函數(shù)在被定 義的返回語句中返回類型中返回一個單獨的數(shù)值。而表數(shù)值函數(shù),其返回一個表。還有兩種類型的表數(shù)值函數(shù):內(nèi)嵌小應(yīng)用程序以及多重語句的程序。注意 2: 可計算的列可計算的列是一種虛擬的列, 它的計算是應(yīng)用同一表列的其他列的表達式, 它并沒有存儲在表內(nèi)。這個表達式可是是非計算的列名,常數(shù),函數(shù),變量,以及這些一個或多個操作數(shù)連接起來的組合但 是不可能是一個子查詢。 可計算列可以用在查詢列表中。 查詢列表是用語句排序的, 常規(guī)的表達式也可以應(yīng)用在其他的地方。然而,一個可計算列不能用于缺省或者定義為外
45、鍵或者非空定義限制, 但是如果該可計算列值被確定的表達式定義且結(jié)果的數(shù)據(jù)類型在索引列是被允許的情況下,它在索引中可以做為鍵列,或著是主鍵的一部分,或是唯一限制。不正確的答案解析:B存儲程序的返回值不能用于查詢的 SELECT列表內(nèi)。注意:存儲程序能夠返回數(shù)據(jù)作為輸出參數(shù), 該參數(shù)可以返回一個數(shù)據(jù)或者是指針變量。 代碼經(jīng)常是整型的數(shù)值,而每個 SELECT語句的結(jié)果集包括在存儲程序中或者是被該存儲程序調(diào)用的其他存儲程序內(nèi)。 且全局指針變量能被外部的存儲程序參照。 存儲程序協(xié)助達到邏輯的一致的實施橫跨應(yīng)用。 能夠設(shè)計執(zhí)行一些普通的計劃任務(wù) SQL語句能在存儲程序中被設(shè)計,編碼,測試一次。各種應(yīng)用需
46、要執(zhí)行,然后任務(wù)可能簡單地執(zhí)行存儲程序。編制程序企業(yè)邏輯入一個唯一的存儲程序并且提供一個單獨的控制觀點以保證商業(yè)慣例正確地實施。存儲程序同樣能實現(xiàn)改善性能。許多的任務(wù)被執(zhí)行為一系列的SQL語句。條件邏輯被應(yīng)用到第一個SQL語句的結(jié)果決定哪一個后續(xù)的SQL語句被執(zhí)行。如果這些SQL語句以及條件邏輯別寫到一個存儲程序內(nèi),他們將成為服務(wù)器上單一執(zhí)行計劃的一部分。結(jié)果并不需要返回給客戶機來應(yīng)用條件邏輯。所有的工作都是由服務(wù)器來完成的。C只是利用插入觸發(fā)器并沒有什么效果,如果容器的體積改變值會被更新,觸發(fā)器也將被更新。注意:觸發(fā)器是一系列的存儲程序,當 UPDATE, INSERT, or DELETE
47、語句操作表或視圖時觸發(fā)器自動執(zhí)行。 當數(shù)據(jù)被修改時觸發(fā)也可用于自動執(zhí)行企業(yè)條例以及被執(zhí)行來拓展限制、 缺省以及規(guī)則的整型測試邏輯。 每當他們提供應(yīng)用的必需的功能限制和缺省應(yīng)該被使用。觸發(fā)器只有當 UPDATE, INSERT or DELETE是針對表或視圖操作時能夠用于運行計算和返回結(jié)果。 觸發(fā)器所返回的結(jié)果是有任何觸發(fā)器內(nèi)的查詢語句來產(chǎn)生的。包括觸發(fā)器內(nèi)的 SELECT語句而不是那些只含參數(shù)的語句,這些只含參數(shù)的語句并不被推薦因為用戶并不希望在操作 UPDATE,INSERT, or DELETE 時任何數(shù)據(jù)返回。DSQL Server 表包含可計算的列。這些可計算的列只能運用同一表中的常
48、數(shù)、函數(shù)以及其他列。 一個可計算的列并不能運用其他表中的任何列。 我們不能利用一個可計算的列來存儲容器的體積。11 你是一個醫(yī)院的數(shù)據(jù)庫管理員, 醫(yī)院大樓共 26 層,每層樓有 4 個設(shè)備供應(yīng)室。你正在設(shè)計可使用設(shè)備的庫存控制數(shù)據(jù)庫。 某些設(shè)備必須保持有庫存, 當一個設(shè)備使用了,通過掃描其條碼, 在數(shù)據(jù)庫中減少其相應(yīng)的庫存量。 當一個供應(yīng)室的某設(shè)備數(shù)量小于規(guī)定的最小數(shù)量時,就要通知設(shè)備管理員。 你應(yīng)該咋辦?A創(chuàng)建一個存儲過程,當庫存表更新時調(diào)用該存儲過程,如果設(shè)備數(shù)量小于規(guī)定的最小數(shù)量時,通過調(diào)用xp_logevent系統(tǒng)存儲過程通知管理員。B創(chuàng)建一個 INSTEADOF UPDATE觸發(fā)器,
49、當 inserted表中的數(shù)量小于規(guī)定的最小數(shù)量時, SQLAgentMail 給管理員發(fā)一個e-mail 。C創(chuàng)建一個 FOR UPDATE觸發(fā)器,當 inserted 表中的數(shù)量小于規(guī)定的最小數(shù)量時,通過調(diào)用 xp_sendmail 系統(tǒng)存儲過程通知管理員。D. 安排 SQL server任務(wù)調(diào)度,每4 小時執(zhí)行一次任務(wù)。設(shè)置 notify_level_page = 2 設(shè)置任務(wù)來測試設(shè)備的數(shù)量和規(guī)定的最小數(shù)量;設(shè)置任務(wù)當數(shù)量小于規(guī)定的最小數(shù)量時, 返回一個錯誤值這樣就會及時通知管理員。答案: C.解釋 : FOR UPDATE觸發(fā)器可以用來檢查 INSERT和 UPDATE語句提供的數(shù)據(jù)
50、,一旦到達某個值時可以發(fā)送一個 e-mail 信息, xp_sendmail 是 MS SQL 2000 中用來給給定接受者發(fā)送信息的函數(shù)。不正確答案 :A: xp_logevent 把用戶自定義信息寫入 MS SQL Server 日志文件和 Windows 2000 事件查看器,這種方法不能滿足此題目要求。B: INSTEAD OF UPDATE觸發(fā)器可以用來檢查 INSERT和 UPDATE語句提供的數(shù)據(jù),并且替換該 UPDATE語句。當警告觸發(fā)或任務(wù)完成及失敗時, SQLAgentMail 可以設(shè)置可發(fā)送 e-mail 信息。INSTEAD OF UPDATE觸發(fā)器可以用來產(chǎn)生警告,接
51、著 SQLAgentMail 可以作出相應(yīng)的反應(yīng),但是 INSTEADOFUPDATE觸發(fā)器用發(fā)送警告的過程替換正常的更新過程。也就是說,只發(fā)出警告而不更新表,將破壞數(shù)據(jù)的安全性。D: 只要條件滿足就要給管理員發(fā)出通知,例如,當供應(yīng)室的設(shè)備數(shù)量小于規(guī)定的最小數(shù)量時, SQL server 4 個小時才運行一次調(diào)度任務(wù),就不能及時通知管理員,只有調(diào)度任務(wù)運行時,才能通知管理員,這樣有可能條件滿足 4 小時后,管理員才能收到通知。不能滿足本題要求。12 你是一個公司的數(shù)據(jù)庫開發(fā)人員,數(shù)據(jù)庫存儲員工的工作時間表,一般平均有 5 個用戶同時存取這個數(shù)據(jù)庫, 并且查詢時間要小于 1 秒。然而,在周五下午或周一早上,大部分雇員輸入他們的時間安表數(shù)據(jù)時,數(shù)據(jù)庫可能會有同時50個用戶使用,這時,查詢返回時間平均是15到20秒。你需要發(fā)現(xiàn)查詢變慢的原因并解決這個問題,你將怎么做?a. 使用 sp_lock 和 sp_who 系統(tǒng)存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 借用鐵路用地合同范本
- 2025年淮安b2考貨運資格證要多久
- 別墅電梯銷售合同范本
- 上海退休人員返聘合同范本
- 買賣產(chǎn)品合作合同范本
- 轉(zhuǎn)化單位規(guī)則
- 加盟產(chǎn)品經(jīng)銷合同范本
- 化肥試驗合同范本
- 北京合伙創(chuàng)業(yè)合同范本
- 個人合作股合同范本
- 2025年供應(yīng)鏈管理公司合作項目協(xié)議書
- 2025年度度假村景觀設(shè)計及施工一體化合同
- 2025年山東化工職業(yè)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 《如何規(guī)劃養(yǎng)禽場》課件
- 2024-2025學年云南省昆明市盤龍區(qū)三年級(上)期末數(shù)學試卷(含答案)
- 物業(yè)公司行政人事部職責
- 醫(yī)療健康行業(yè)保密免責協(xié)議書
- 《設(shè)計思維與方法》課件
- 第一課走進人工智能 說課稿 2023-2024學年浙教版(2023)初中信息技術(shù)八年級下冊
- 健身行業(yè)會員權(quán)益保障及免責條款協(xié)議
- 體檢中心前臺接待流程
評論
0/150
提交評論