《Transact-SQL管理與開發實例精粹》是2010年由電子工業出版社出版社出版的圖書,作者是趙松濤。
基本介紹
- 書名:突出重圍
- 作者:趙松濤
- ISBN:978-7-121-11447-2
- 類別:正價
- 頁數:460頁
- 定價:59.00元
- 出版社:電子工業出版社
- 出版時間:2010年10月
- 裝幀:平裝
- 開本:16開
宣傳語,內 容 簡 介,前 言,目 錄,
宣傳語
專業專注,獨到獨家,深度深入
內 容 簡 介
《Transact-SQL管理與開發實例精粹》將作者10餘年從事SQL Server資料庫管理和開發經驗積累的Transact-SQL綜合性實例整理歸類並進行剖析。可以幫助讀者借鑑和開發出適合自己的Transact-SQL實例,這些實例既可以用於資料庫管理,也可以用於資料庫系統開發。
由於Transact-SQL語言良好的傳承和繼承性,因此,本書的絕大部分代碼可以跨越SQL Server版本的限制,在SQL Server 2008、2005甚至2000上都可以使用,即使今後推出的新版本,幾乎也不用修改就可以移植使用。本書涉及Transact-SQL使用的各個方面,但又不是在線上叢書語法的簡單複製,而是側重於通過實例來學習綜合使用Transact-SQL各語法要素完成特定任務的方法。
本書既適合資料庫管理人員,也適合開發人員閱讀和參考,還可作為大中專院校及各類培訓班的教材,極具實用性。
前 言
圖書難做,技術類的圖書越來越難做,因為網路已經讓資料的搜尋和盜版幾乎沒有成本,還緣於社會轉型期的喧囂和浮躁已經讓人很難靜下心來讀書。在接連出版了幾本叫好不叫座的資料庫圖書後,我幾乎已經完全喪失了寫作的勇氣。是郭立主任和她領導的博文視點這個團體給了我勇氣和力量,在歷經3年的打磨和反覆修改的基礎上,才有了這本圖書的問世。箇中辛苦,唯有自知。
從SQL Server 6.5到SQL Server 2008,我一直在學習、研究並使用,10多年的過程中,對其了解和掌握也有一個逐步加深的過程。如果說有什麼心得和體會的話,我的理解是Transact-SQL語言應該是SQL Server的核心和精髓,因為不論是管理和開發,最終落腳都是Transact-SQL語言的作用。遺憾的是,大部分學習SQL Server的人員都在簡單掌握其圖形化管理界面操作後,往往忽略對Transact-SQL的學習和了解。一方面是SQL Server的在線上叢書已經做得足夠仔細,另外一方面也是因為Transact-SQL的學習沒有好的實例和代碼可以借鑑。
最近幾年,我逐步深入研究SQL Server的核心機制,在此基礎上形成了自己的一些研究結論。這本圖書就是將自己對Transact-SQL的了解和掌握,以及研究使用的實例代碼呈現給讀者,絕非對在線上叢書的簡單雷同使用。因此,本書可以稱為是一名資料庫技術愛好者的獨家秘笈。
原創留口碑,專業出精品。無論是管理還是開發人員,我相信這本書都可以作為您的案頭叢書。
踏實做人,用心做事,我相信付出總會有回報。您的批評、建議和反饋就是對我最大的回報。本書中涉及的所有實例原始碼進行下載。
本書主要由趙松濤編寫,參與編寫的還有李翔鷹(第6、11、13章)、余艷、王恩春、趙迎春、趙高飛、盧穎、朱遠妮、李黎明、彭興文、杜從雲、朱春鳳、鄧新華。
感謝郭立女士和她領導的博文視點這個年輕的、充滿朝氣的團隊給予我充分的創作自由並提出了寶貴的意見。
獻給所有我的讀者家人、父母和讀者。
作 者
目 錄
第1章 Transact-SQL語法元素 1
1.1 標識符 1
1.1.1 必須有標識符嗎 1
1.1.2 標識符的排序規則 1
1.1.3 常規標識符 2
1.1.4 帶分隔設定的標識符 3
1.2 數據類型 3
1.2.1 哪些對象需要數據類型 3
1.2.2 如何選擇恰當的數據類型 4
1.2.3 基本數據類型 5
1.2.4 SQL Server 2008新增數據類型 5
1.2.5 深入研究tinyint數據類型 6
1.2.6 深入研究smallint數據類型 8
1.2.7 深入研究int(Integer)數據類型 10
1.2.8 深入研究bigint數據類型 12
1.2.9 decimal(numeric)數據類型的使用 14
1.2.10 float數據類型的使用 16
1.2.11 real數據類型的使用 17
1.2.12 char數據類型的使用 17
1.2.13 varchar數據類型的使用 17
1.2.14 用CAST函式轉換數據類型 18
1.2.15 用CONVERT函式轉換數據類型 18
1.3 常量 19
1.3.1 數值型常量的格式 19
1.3.2 字元串型常量的格式 20
1.3.3 日期時間型常量的格式 20
1.4 注釋 20
1.4.1 添加單行注釋信息 20
1.4.2 添加多行注釋信息 20
1.5 變數 21
1.5.1 變數的數據類型 21
1.5.2 變數的分類 21
1.5.3 局部變數的聲明 21
1.5.4 局部變數的賦值 22
1.5.5 局部變數的作用域 23
1.6 常用聚合函式 23
1.6.1 計算平均值AVG 23
1.6.2 計算最小值MIN 24
1.6.3 計算最大值MAX 25
1.6.4 計算求和值SUM 26
1.6.5 計算項數值COUNT(COUNT_BIG) 26
1.6.6 計算標準偏差值STDEV 27
1.6.7 計算方差VAR 28
1.7 常用日期時間函式 29
1.7.1 獲取當前日期GETDATE 29
1.7.2 獲取年度信息YEAR 30
1.7.3 獲取月份信息MONTH 30
1.7.4 獲取天數信息DAY 30
1.7.5 任意獲取日期時間值部分DATEPART 31
1.7.6 日期加法DATEADD 31
1.7.7 日期減法DATEDIFF 32
1.7.8 2008中新增的日期時間型函式 33
1.7.9 判斷是否為日期數據ISDATE 33
1.8 常用字元串函式 33
1.8.1 獲取字元的ASCII碼ASCII 33
1.8.2 獲取ASCII碼對應的字元CHAR 34
1.8.3 獲取字元的Unicode編碼UNICODE 35
1.8.4 獲取Unicode編碼對應的字元NCHAR 36
1.8.5 獲取字元串第一次出現位置PATINDEX 36
1.8.6 生成空格字元串SPACE 37
1.8.7 按指定次數重複生成字元串REPLICATE 38
1.8.8 截取子串SUBSTRING 39
1.8.9 獲取字元串長度LEN 39
1.8.10 替換字元串中內容STUFF 40
1.8.11 指定位置搜尋字元串中內容CHARINDEX 41
1.8.12 生成帶分隔設定的Unicode字元串QUOTENAME 42
1.8.13 轉換浮點數字為字元串STR 42
1.8.14 截取左邊字元串LEFT 43
1.8.15 截取右邊字元串RIGHT 43
1.8.16 截取左邊空格LTRIM 44
1.8.17 截取右邊空格RTRIM 44
1.8.18 轉換為小寫字元串LOWER 45
1.8.19 轉換為大寫字元串UPPER 45
1.8.20 反序字元串REVERSE 46
1.8.21 獲取字元串位元組數DATALENGTH 46
1.9 常用文本和圖像函式 47
1.9.1 查找特定字元串PATINDEX 47
1.9.2 獲取文本指針TEXTPTR 47
1.9.3 檢測文本指針是否有效TEXTVALID 49
1.9.4 讀取文本圖像列內容READTEXT 49
1.9.5 寫入文本圖像列內容WRITETEXT 50
1.9.6 更新文本圖像列內容UPDATETEXT 51
1.10 常用數學函式 52
1.10.1 計算絕對值ABS 52
1.10.2 獲取大於等於的最小整數值CEILING 53
1.10.3 獲取小於等於的最大整數值FLOOR 53
1.10.4 獲取隨機數RAND 53
1.10.5 獲取指定長度和精度ROUND 54
1.11 常用元數據函式 54
1.11.1 獲取資料庫標識符DB_ID 54
1.11.2 獲取資料庫名稱DB_NAME 55
1.11.3 獲取資料庫屬性值DATABASEPROPERTYEX 56
1.11.4 獲取檔案組標識符FILEGROUP_ID 57
1.11.5 獲取檔案組名稱FILEGROUP_NAME 58
1.11.6 獲取檔案組屬性值FILEGROUPPROPERTY 58
1.11.7 獲取檔案標識符FILE_ID 60
1.11.8 獲取檔案名稱稱FILE_NAME 61
1.11.9 獲取檔案屬性值FILEPROPERTY 62
1.11.10 獲取數據對象標識符OBJECT_ID 63
1.11.11 獲取數據對象名稱OBJECT_NAME 64
1.11.12 獲取檔案屬性值OBJECTPROPERTYEX 66
1.12 運算符 67
1.12.1 算術運算符 67
1.12.2 位運算符 68
1.12.3 比較運算符 68
1.12.4 邏輯運算符 68
1.12.5 字元串連線運算符 69
1.12.6 賦值運算符 69
1.12.7 運算符的優先權 69
第2章 Transact-SQL語句 70
2.1 控制流語句 70
2.1.1 程式塊語句BEGIN..END 70
2.1.2 判斷語句IF..ELSE 71
2.1.3 循環語句WHILE 72
2.1.4 分支判斷語句CASE 74
2.1.5 無條件退出語句RETURN 75
2.1.6 無條件跳轉語句GOTO 77
2.1.7 延期執行語句WAITFOR 78
2.2 運行時生成語句 79
2.2.1 用EXECUTE執行動態命令 80
2.2.2 用SP_EXECUTESQL執行動態命令 81
2.2.3 參數替換 83
2.2.4 為什麼提倡使用SP_EXECUTESQL 84
2.2.5 使用輸出參數的SP_EXECUTESQL 85
2.3 語句之間數據的傳遞 86
2.3.1 Transact-SQL語句之間數據的傳遞 86
2.3.2 Transact-SQL與高級語言之間數據的傳遞 87
2.4 錯誤處理 90
2.4.1 SQL Server資料庫引擎錯誤 91
2.4.2 用TRY..CATCH發現錯誤 91
2.4.3 捕獲錯誤的系統函式 92
2.4.4 用@@ERROR捕獲上一條語句的錯誤 93
2.4.5 用RAISERROR反饋錯誤 94
2.5 批處理 96
2.5.1 GO的含義 96
2.5.2 研究批處理的執行 96
2.5.3 批處理的意義 99
2.5.4 為什麼臨時變數作用域不能跨批處理 100
2.5.5 如何編寫批處理 101
2.5.6 批處理如何處理錯誤 101
2.5.7 腳本 102
第3章 查詢伺服器配置信息 103
3.1 配置查詢環境 103
3.2 查詢伺服器屬性值 104
3.2.1 ServerProperty系統函式 104
3.2.2 查詢資料庫引擎版本 105
3.2.3 綜合使用ServerProperty函式查詢 105
3.3 判斷登錄賬戶身份 106
3.4 讀寫註冊表信息 106
3.4.1 讀註冊表xp_regenumvalues 107
3.4.2 讀註冊表xp_regread 107
3.4.3 寫註冊表xp_regwrite 108
3.4.4 刪除註冊表項xp_regdeletevalue 108
3.4.5 讀註冊表項xp_instance_regread 109
3.4.6 寫註冊表xp_instance_regwrite 109
3.4.7 讀註冊表中的主要數據檔案路徑信息 110
3.4.8 讀註冊表中的錯誤日誌檔案路徑信息 111
3.4.9 讀註冊表中的日誌檔案路徑信息 112
3.5 綜合實例 113
3.5.1 獲取“常規”選項卡信息 113
3.5.2 獲取伺服器配置參數信息 114
3.5.3 獲取伺服器上資料庫信息 115
3.5.4 獲取伺服器上處理器數量 115
3.5.5 提升SQL Server伺服器優先權 116
3.5.6 獲得Windows版本信息 116
3.5.7 獲得身份驗證機制 117
3.5.8 獲得登錄審核機制 118
3.5.9 自動檢測伺服器重要的配置參數 118
3.5.10 查詢伺服器的用戶或用戶組 126
3.5.11 查詢用戶角色或應用程式角色 127
第4章 登錄過程 129
4.1 連線 129
4.1.1 查詢所有連線信息 129
4.1.2 查詢連線總數 130
4.1.3 查詢阻塞的連線 130
4.1.4 查詢用戶建立的連線 130
4.1.5 查詢系統建立的連線 130
4.1.6 查詢活動的用戶連線 131
4.1.7 查詢用戶連線的不同客戶機 131
4.2 配置 131
4.2.1 查詢當前系統配置 131
4.2.2 查詢當前最大工作執行緒數 132
4.3 會話 132
4.3.1 查詢伺服器上的所有會話 132
4.3.2 查詢會話建立的游標 132
4.3.3 查詢會話的錯誤信息 133
4.3.4 查詢會話的緩衝區命中率 133
4.3.5 查詢會話的作業系統執行緒 134
4.3.6 查詢當前會話ID 135
4.4 綜合運用 135
4.4.1 綜合查詢連線統計信息 135
4.4.2 判斷當前登錄的許可權 137
4.4.3 查詢會話逾時設定 137
4.4.4 判斷連線是否為DAC 138
4.4.5 查詢當前連線的網路參數 138
4.4.6 查詢SQL Server版本信息 139
4.4.7 查詢伺服器基本屬性 139
4.4.8 查詢當前登錄名 141
4.4.9 查詢當前的活動事務數 141
4.4.10 查詢資料庫緩衝區命中率低的會話 141
4.4.11 查詢資料庫緩衝區命中率最低的會話的SQL語句 142
第5章 資料庫相關 144
5.1 查詢資料庫信息 144
5.1.1 查詢所有的用戶資料庫名稱 144
5.1.2 用sp_dboption存儲過程配置資料庫 145
5.1.3 配置資料庫的恢復模式 145
5.1.4 判斷資料庫的名稱是否含有特定字元 146
5.1.5 判斷兩個資料庫的排序規則是否一致 147
5.1.6 判斷資料庫是否系統資料庫和可讀 148
5.1.7 查詢可以訪問的資料庫 148
5.1.8 查詢資料庫的檔案 149
5.1.9 查詢資料庫的系統表 150
5.1.10 查詢資料庫的排序規則 151
5.1.11 查詢資料庫的排序規則Windows代碼 152
5.1.12 查詢資料庫支持的排序規則 152
5.1.13 統計資料庫上的進程數 152
5.1.14 查詢資料庫的兼容性級別 153
5.1.15 查詢資料庫的最後備份時間 153
5.1.16 查詢資料庫的最後日誌備份時間 153
5.2 資料庫的存儲空間 154
5.2.1 查詢資料庫的總空間 154
5.2.2 查詢資料庫的數據檔案總空間 154
5.2.3 查詢資料庫的日誌檔案總空間 155
5.2.4 查詢數據檔案已經分配的空間 155
5.2.5 查詢數據檔案的可用空間 155
5.2.6 查詢日誌檔案已經分配的空間 157
5.3 綜合運用 159
5.3.1 查詢資料庫的屬性 159
5.3.2 獲取所有資料庫的數據檔案空間使用率排序 159
第6章 未公開的DBCC命令 162
6.1 DBCC PAGE查詢數據頁面 162
6.1.1 查詢DBID和DBNAME 163
6.1.2 查詢FILENUM和PAGENUM 163
6.1.3 DBCC PAGE的典型用法 163
6.2 DBCC LOG查詢日誌 164
6.3 DBCC ERRORLOG初始化錯誤日誌 165
6.4 DBCC FLUSHPROCINDB清除快取存儲過程 166
6.5 DBCC BUFFER查詢緩衝區 166
6.6 DBCC DBINFO顯示資料庫結構 167
6.7 DBCC DBTABLE顯示數據字典 168
6.8 DBCC IND顯示錶的索引頁面信息 168
6.9 DBCC PRTIPAGE顯示索引每行的數據頁 169
6.10 DBCC RESOURCE顯示伺服器資源情況 169
6.11 DBCC DBRECOVER恢復質疑資料庫 170
6.12 DBCC CACHESTATS查看記憶體統計信息 170
6.13 DBCC MEMORYSTATUS查詢記憶體分配 171
6.14 DBCC跟蹤標記 171
6.14.1 概念 171
6.14.2 打開跟蹤標記 172
6.14.3 關閉跟蹤標記 172
6.14.4 查詢跟蹤標記狀態 172
6.15 DBCC SHOWFILESTATS顯示數據檔案空間 172
6.16 WITH TABLERESULTS表格顯示信息 173
6.17 DBCC LOGINFO查詢虛擬日誌信息 173
6.18 DBCC EXTENTINFO查詢盤區數 174
第7章 數據和日誌檔案 176
7.1 FILEPROPERTY函式獲得檔案屬性 176
7.1.1 判斷檔案是否唯讀 176
7.1.2 判斷檔案是否主要數據檔案 177
7.1.3 查詢檔案已經使用空間 177
7.2 FN_VIRTUALFILESTATS獲得檔案I/O性能 177
7.2.1 查詢指定檔案的I/O性能 178
7.2.2 查詢指定資料庫所有檔案的I/O性能 178
7.2.3 查詢所有資料庫所有檔案的I/O性能 179
7.2.4 查詢檔案I/O性能的動態性能視圖 180
7.3 日誌檔案相關 180
7.2.1 查詢VLF分布情況 180
7.2.2 移動日誌檔案的內容 182
7.2.3 刪除日誌檔案的內容 182
7.4 數據檔案相關 183
7.4.1 查詢所有資料庫的數據檔案空間情況 183
7.4.2 查詢資料庫存儲空間的詳細分布 185
7.4.3 查詢已分配空間中的行內數據 192
7.4.4 查詢已分配空間中的LOB大型數據 193
7.4.5 查詢已分配空間中的行溢出數據 194
7.4.6 查詢哪些類型的對象使用了數據空間 194
7.4.7 查詢使用數據空間的對象類型及其數量 194
7.5 綜合查詢資料庫檔案的I/O性能 195
第8章 數據對象 197
8.1 索引 197
8.1.1 更新表上所有索引的統計信息 197
8.1.2 更新表上特定索引的統計信息 199
8.1.3 統計資料庫中索引使用的空間總和 200
8.1.4 索引使用的空間詳細情況 203
8.2 表 208
8.2.1 獲得資料庫表的存儲空間分布 208
8.2.2 獲得數據緩衝區中數據對象的存儲分布 212
第9章 性能監控 218
9.1 對象分配性能 218
9.1.1 監控盤區分配情況 218
9.1.2 監控盤區回收情況 219
9.1.3 監控頁面拆分情況 220
9.1.4 監控表上鎖升級情況 221
9.2 記憶體性能 222
9.2.1 SQL Server記憶體詳解 223
9.2.2 查詢SQL Server伺服器使用的記憶體數量 225
9.2.3 查詢連線使用的記憶體數量 225
9.2.4 查詢鎖使用的記憶體數量 226
9.2.5 查詢最佳化器使用的記憶體數量 226
9.2.6 查詢SQL使用的記憶體數量 226
9.2.7 查詢伺服器能夠使用的最大記憶體數量 227
9.2.8 查詢當前伺服器上可用記憶體數量 227
9.2.9 查詢最小伺服器記憶體 228
9.2.10 查詢最大伺服器記憶體 228
9.2.11 查詢計算機的物理記憶體 229
9.2.12 查詢計算機的虛擬記憶體 229
9.3 過程緩衝區性能 229
9.3.1 查詢過程緩衝區使用的記憶體 229
9.3.2 查詢過程緩衝區內容類別 230
9.3.3 查詢過程緩衝區命中率 230
9.3.4 查詢過程緩衝區對象分布比例 231
9.3.5 查詢過程緩衝區中各類對象的命中率 232
9.3.6 查詢過程緩衝區各類對象使用的比例 232
9.3.7 清除過程緩衝區中的對象 233
9.3.8 過程緩衝區中消耗資源Top對象 234
9.4 數據緩衝區性能 238
9.4.1 查詢數據緩衝區的記憶體數量 238
9.4.2 查詢數據緩衝區的理想記憶體數量 239
9.4.3 查詢數據緩衝區的可用記憶體數量 239
9.4.4 查詢數據緩衝區中數據使用的記憶體 239
9.4.5 查詢數據緩衝區的命中率 240
9.4.6 清除數據緩衝區中的對象 240
9.4.7 數據緩衝區中消耗資源Top對象 241
9.5 其他實例 242
9.5.1 查詢資源等待情況 242
9.5.2 查詢計數器種類和性能值 243
9.5.3 查詢執行計畫的屬性 244
9.5.4 查詢性能計數器表是否可以使用 245
9.5.5 查詢伺服器記憶體總體分布情況 245
第10章 管理其他實例 250
10.1 檢測和使用XP_CMDSHELL 250
10.1.1 檢測XP_CMDSHELL是否啟用 250
10.1.2 用XP_CMDSHELL執行命令 253
10.2 錯誤日誌 253
10.2.1 產生並使用新的錯誤日誌檔案 253
10.2.2 獲得錯誤日誌檔案的信息 254
10.3 代理服務 254
10.3.1 判斷代理服務是否啟動 254
10.3.2 查詢代理服務上產生的警報 254
10.3.3 配置代理服務自啟動 255
10.3.4 判斷代理服務是否允許訪問 255
10.3.5 獲得代理服務啟動信息 256
10.3.6 記錄代理服務啟動時間 256
10.3.7 獲得代理服務子系統的信息 256
10.3.8 獲得代理服務詳細配置信息 256
10.3.9 運行代理服務監視器 258
10.3.10 刷新代理服務作業 258
10.3.11 查詢代理服務活動作業 259
10.4 設定登錄環境 259
10.5 資料庫 260
10.5.1 產生資料庫檢查點 260
10.5.2 設定資料庫單用戶模式 260
10.5.3 分離資料庫 260
10.5.4 附加資料庫 260
10.5.5 判斷指定路徑的日誌檔案是否存在 261
10.5.6 獲取主要數據檔案中的檔案信息 261
10.5.7 獲取主要數據檔案中的資料庫信息 262
10.5.8 獲取資料庫的用戶表信息 263
10.5.9 脫機資料庫 264
10.5.10 在線上資料庫 264
10.5.11 收縮資料庫 264
10.5.12 判斷用戶是否可以訪問master資料庫 264
10.6 訪問註冊表 265
10.7 讀取硬碟空間信息 266
10.8 判斷檔案是否存在 266
10.9 存儲空間的碎片 266
10.9.1 數據的存儲類型 267
10.9.2 數據的存儲結構 270
10.9.3 存儲空間的碎片類型 270
10.9.4 碎片對數據操作性能的影響 271
10.9.5 dbcc showcontig檢測碎片 272
10.9.6 dm_db_index_physical_stats檢測碎片 274
10.9.7 消除碎片的方法 277
10.9.8 自動檢測當前資料庫的碎片 278
10.9.9 自動消除資料庫的碎片 283
第11章 數據查詢 288
11.1 語法結構 288
11.2 選擇列表 289
11.2.1 選擇所有列 289
11.2.2 選擇特定列 293
11.2.3 包含運算符的查詢 295
11.2.4 包含函式的查詢 296
11.2.5 消除重複項 297
11.3 FROM子句 298
11.3.1 使用表別名 298
11.3.2 使用表提示 301
11.4 WHERE子句 305
11.4.1 WHERE子句中的運算符 306
11.4.2 比較查詢 307
11.4.3 範圍查詢 308
11.4.4 列表查詢 309
11.4.5 模式匹配查詢 310
11.5 GROUP BY子句 312
11.5.1 語法結構 312
11.5.2 實例分析 313
11.6 ORDER BY子句 314
11.6.1 語法結構 314
11.6.2 實例分析 315
11.7 HAVING篩選查詢 316
11.7.1 HAVING篩選查詢的語法結構 316
11.7.2 HAVING篩選查詢實例 316
11.8 INTO查詢 316
11.8.1 INTO查詢的語法結構 316
11.8.2 INTO查詢實例 317
11.9 SELECT聯結查詢 317
11.9.1 SELECT聯結查詢的語法結構 317
11.9.2 SELECT聯結查詢的分類 317
11.9.3 笛卡兒積查詢 318
11.9.4 等值聯結查詢 318
11.9.5 自然聯結查詢 318
11.9.6 自身聯結查詢 318
11.9.7 內聯結查詢 319
11.9.8 左外聯結查詢 319
11.9.9 右外聯結查詢 320
11.9.10 全外聯結查詢 320
11.10 SELECT嵌套查詢 320
11.10.1 什麼是SELECT嵌套查詢 320
11.10.2 什麼是SELECT嵌套子查詢 321
11.10.3 簡單嵌套查詢 321
11.10.4 in嵌套查詢 322
11.10.5 some嵌套查詢 322
11.10.6 all嵌套查詢 323
11.10.7 exists嵌套查詢 324
11.11 操作結果集 324
11.11.1 Union形成並集 324
11.11.2 Except形成差集 325
11.11.3 InterSect形成交集 326
11.11.4 用公用表表達式臨時存儲結果集 326
第12章 數據操作 328
12.1 INSERT語句研究 328
12.1.1 表結構和索引結構 328
12.1.2 執行前的日誌情況分析 329
12.1.3 執行情況分析 329
12.1.4 執行後的日誌情況分析 331
12.1.5 研究數據的變化情況 332
12.1.6 研究結論 333
12.2 UPDATE語句研究 334
12.2.1 執行前的日誌情況分析 334
12.2.2 執行情況分析 334
12.2.3 執行後的日誌情況 335
12.2.4 研究結論 338
12.3 DELETE語句研究 338
12.3.1 執行前的日誌情況分析 338
12.3.2 執行情況分析 339
12.3.3 執行後的日誌情況 339
12.3.4 研究結論 341
12.4 深入探討語句內部機制 341
12.4.1 誰先插入數據 342
12.4.2 誰先更新數據 342
12.4.3 誰先刪除數據 342
第13章 T-SQL游標 343
13.1 游標概述 343
13.1.1 什麼是游標 343
13.1.2 游標的類型 344
13.1.3 默認結果集是如何使用的 344
13.1.4 什麼是MARS 345
13.1.5 使用游標還是默認結果集 345
13.1.6 使用伺服器游標還是客戶機游標 346
13.2 T-SQL游標定義及使用 346
13.2.1 T-SQL游標的生命周期 346
13.2.2 T-SQL游標的聲明 347
13.2.3 T-SQL游標的打開 347
13.2.4 T-SQL游標的讀取 348
13.2.5 T-SQL游標的關閉 348
13.2.6 T-SQL游標的釋放 349
13.2.7 T-SQL游標的綜合實例 349
第14章 事務和鎖 351
14.1 多用戶資料庫的並發問題 351
14.1.1 並發訪問的實例 351
14.1.2 並發問題 352
14.2 事務 353
14.2.1 事務的特性 353
14.2.2 事務的狀態 354
14.3 SQL SERVER中的事務機制 355
14.3.1 事務模式 355
14.3.2 更改事務模式 356
14.3.3 事務的啟動 357
14.3.4 事務日誌記錄 357
14.3.5 事務編程語句 357
14.3.6 事務的調度 358
14.3.7 事務的隔離性級別 358
14.3.8 批(GO) 359
14.4 鎖 360
14.4.1 鎖的粒度 360
14.4.2 鎖的類型(模式) 361
14.4.3 鎖持有度 361
14.4.4 動態鎖機制 362
14.4.5 查看鎖 362
14.5 死鎖 363
14.5.1 死鎖的發生 364
14.5.2 消除死鎖的方法 364
14.5.3 SQL Server 死鎖檢測和結束機制 365
14.5.4 跟蹤和檢測死鎖 365
第15章 存儲過程 367
15.1 存儲過程概述 367
15.1.1 從批處理談起 367
15.1.2 存儲過程的引入 368
15.1.3 存儲過程是什麼 369
15.1.4 可不可以不使用存儲過程 370
15.1.5 存儲過程的優點 370
15.1.6 T-SQL的注入式攻擊與防範 371
15.1.7 用參數化的存儲過程防範T-SQL的注入式攻擊 372
15.2 存儲過程的類型 373
15.2.1 按照定義主體分類 374
15.2.2 按照生命周期分類 374
15.3 T-SQL存儲過程的創建 374
15.3.1 創建T-SQL存儲過程的規則 374
15.3.2 創建T-SQL存儲過程的語法 375
15.3.3 創建無參數T-SQL存儲過程 376
15.3.4 創建帶輸入參數的T-SQL存儲過程 377
15.3.5 創建帶輸出參數的T-SQL存儲過程 377
15.4 T-SQL存儲過程的執行 378
15.4.1 執行無參數的T-SQL存儲過程 379
15.4.2 執行帶輸入參數的T-SQL存儲過程 379
15.4.3 執行帶輸出參數的T-SQL存儲過程 379
15.5 數據操作T-SQL存儲過程 380
15.5.1 數據查詢 380
15.5.2 數據錄入 381
15.5.3 數據刪除 381
15.5.4 數據統計和求和 382
15.5.5 數據更新 383
15.5.6 將圖像數據存入資料庫 385
15.6 資料庫操作T-SQL存儲過程 387
15.6.1 附加資料庫 387
15.6.2 完全備份資料庫 387
15.6.3 收縮資料庫 388
15.6.4 檢查資料庫備份 388
15.6.5 刪除資料庫 389
15.6.6 創建資料庫 390
15.7 表操作T-SQL存儲過程 391
15.7.1 清除所有表的內容 391
15.7.2 根據需要對表的內容進行處理 391
15.7.3 統計表數據 393
15.7.4 導出表數據為檔案 393
15.7.5 導出資料庫中特定的表數據為檔案 395
15.7.6 導入文本檔案到表中 396
15.8 檔案操作T-SQL存儲過程 397
15.8.1 創建作業系統目錄 397
15.8.2 刪除作業系統檔案 397
15.8.3 判斷檔案是否存在 398
15.8.4 獲得伺服器名稱 398
15.8.5 統計特定字元串出現的次數 399
15.9 異構數據操作T-SQL存儲過程 400
15.9.1 提取Foxpro數據到SQL Server 400
15.9.2 提取Access數據到SQL Server 401
第16章 自定義函式和觸發器 402
16.1 自定義函式概述 402
16.1.1 什麼是自定義函式 402
16.1.2 自定義函式的優點 404
16.1.3 T-SQL自定義函式的語法 405
16.2 T-SQL自定義函式實例 407
16.2.1 轉換Bool型到字元型 407
16.2.2 轉換不同的日期表達 407
16.2.3 轉換字元串到日期 408
16.3 觸發器概述 408
16.3.1 觸發器類型 409
16.3.2 觸發器的內部實現機制 409
16.3.3 觸發器工作原理 409
16.3.4 觸發器的使用 410
16.3.5 觸發器的創建語法 410
16.4 T-SQL觸發器實例 411
16.4.1 自動記錄資料庫DDL事件的觸發器 411
16.4.2 自動更新表數據的觸發器 412
16.4.3 不允許刪除表數據的觸發器 413
16.4.4 不允許某些插入表數據的觸發器 413
16.4.5 表上發生更新操作後級聯更新其他表的觸發器 414
第17章 某項目資料庫T-SQL開發實例 416
17.1 特殊的表設計 416
17.1.1 資料庫設計歷史表DBBuildVersion 416
17.1.2 資料庫DDL語句執行情況表DatabaseLog 418
17.1.3 資料庫錯誤信息情況表ErrorLog 419
17.2 特殊的表欄位設計 421
17.3 存儲過程設計 423
17.3.1 記錄資料庫錯誤信息 423
17.3.2 顯示資料庫錯誤信息 424
17.3.3 返回伺服器時間 425
17.3.4 根據需要備份資料庫 425
17.3.5 錄入圖書數據 428
17.3.6 更新圖書數據 430
17.3.7 檢索圖書數據 431
17.3.8 刪除圖書數據 431
17.4 觸發器設計 432
17.4.1 自動更新表的ModifiedDate欄位 432
17.4.2 自動記錄資料庫DDL語句 433
17.5 自定義函式設計 434
17.5.1 獲得兩個日期之間的年份數 434
17.5.2 獲得圖書的折扣價 435
17.5.3 獲得價格區間的圖書信息 435