通過SQL事件分析工具,跟蹤SBO的數(shù)據(jù)庫事務(wù)進(jìn)程,發(fā)現(xiàn)以下幾個(gè)數(shù)據(jù)庫系統(tǒng)存儲(chǔ)過程被頻繁的使用:
- sp_tables,檢索SQL Server數(shù)據(jù)庫中的數(shù)據(jù)表。數(shù)據(jù)表分為系統(tǒng)表(SYSTEM TABLE,如sysObjects, sysColumns等),用戶數(shù)據(jù)表(TABLE,SBO出于業(yè)務(wù)處理的需要而建立的數(shù)據(jù)表,一共900多張)和視圖(VIEW,SBO出于業(yè)務(wù)處理的需要,一共創(chuàng)建了20個(gè)視圖)。用戶表通數(shù)據(jù)庫用戶相關(guān),所有具有創(chuàng)建數(shù)據(jù)表的用戶都有創(chuàng)建數(shù)據(jù)表的權(quán)利。在SBO中,通常帶參數(shù)調(diào)用sp_tables,指定數(shù)據(jù)表類型為TABLE,指定數(shù)據(jù)表所有者為DBO,即數(shù)據(jù)庫擁有者的用戶數(shù)據(jù)表。SBO中的典型調(diào)用方式:exec sp_tables N'CINF', N'DBO', NULL, N'''TABLE''',檢索數(shù)據(jù)庫中是否存在數(shù)據(jù)表創(chuàng)建者為DBO數(shù)據(jù)表名為CINF的用戶數(shù)據(jù)表。
- sp_columns,檢索指定數(shù)據(jù)表的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)表自然包括系統(tǒng)表、用戶表和視圖。這個(gè)存儲(chǔ)過程至少需要一個(gè)參數(shù)--數(shù)據(jù)表,當(dāng)然也可以指定表創(chuàng)建者、表或視圖限定符,也可以指定顯示哪些表字段。通過這個(gè)存儲(chǔ)過程能夠解析出數(shù)據(jù)庫中的數(shù)據(jù)表的數(shù)據(jù)結(jié)構(gòu),包括字段名、字段類型、字段長度、數(shù)據(jù)精度、是否允許空值等等。數(shù)據(jù)類型以兩種方式顯示:SQL_DATA_TYPE和SS_DATA_TYPE,前者是SQL語言的通用類型標(biāo)示,后者是SQL Server的數(shù)據(jù)類型標(biāo)示,比如nvarchar類型,前者的標(biāo)示為-9,而后者的類型標(biāo)示為39;datatime前者為9,后者為111。SBO中的典型調(diào)用方式:exec sp_columns N'CINF', N'%', NULL, NULL, @ODBCVer = 3,檢索表CINF支持版本ODBC協(xié)議為3的數(shù)據(jù)結(jié)構(gòu)。
- sp_statistics,檢索制定表的主鍵和索引。同樣的,這個(gè)存儲(chǔ)過程也至少需要數(shù)據(jù)表參數(shù),當(dāng)然也可以指定表創(chuàng)建者、表或視圖限定符,也可以指定顯示哪些表索引,是否只檢索唯一性索引等。這個(gè)存儲(chǔ)過程顯示的指定數(shù)據(jù)表的索引列表及索引結(jié)構(gòu)。SBO中的典型調(diào)用方式:exec sp_statistics N'CINF', N'dbo', NULL, N'%', N'N', N'Q',查詢數(shù)據(jù)表DBO.CINF的所有性索引。
- sp_executesql,這是一個(gè)功能強(qiáng)大的用語指定SQL語句的系統(tǒng)存儲(chǔ)過程,用以執(zhí)行可以多次重用或動(dòng)態(tài)生成的T-SQL 語句或批處理。其特點(diǎn)是動(dòng)態(tài)性和可重用:言其動(dòng)態(tài),是可以將SQL語句特別是調(diào)用參數(shù)動(dòng)態(tài)編寫,而不需要事前固定,這一點(diǎn)上類似于C/C++中的函數(shù)動(dòng)態(tài)參數(shù)支持;自然了,這個(gè)執(zhí)行語句可以寫入到內(nèi)存中,在需要調(diào)用的時(shí)候動(dòng)態(tài)傳遞不固定的參數(shù)序列,從而完成SQL語句和事務(wù)的執(zhí)行。而動(dòng)態(tài)替換 sp_executesql 中的參數(shù),與使用 EXECUTE 語句執(zhí)行字符串相比,有下列優(yōu)點(diǎn):
- sp_executesql 中,T-SQL 語句的實(shí)際文本在兩次執(zhí)行之間未改變,所以查詢優(yōu)化器應(yīng)該能將第二次執(zhí)行中的 T-SQL 語句與第一次執(zhí)行時(shí)生成的執(zhí)行計(jì)劃匹配。這樣,SQL Server 不必編譯第二條語句。
- T-SQL 字符串只生成一次。
- 整型參數(shù)按其本身格式指定。不需要轉(zhuǎn)換為 Unicode。