DBA查询命令积累——不断更新
一、服務器配置:
1、兼容級別:兼容級別只影響指定數據庫中的行為,而不會影響整個服務器上的行為。
1.1、查看數據庫兼容級別及更改兼容級別:
SELECT compatibility_level FROM sys.databases WHERE name=DB_NAME()
1.2、更改兼容級別:將某些數據庫行為設置為與指定的 SQL Server 版本兼容。
sp_dbcmptlevel [ [ @dbname = ] name ] [ , [ @new_cmptlevel = ] version ]
--上面的命令有可能在后續取消,所以建議使用下面語句:
ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 }
權限
只有數據庫所有者、sysadmin 固定服務器角色和 db_owner 固定數據庫角色的成員(前提是您要更改當前數據庫)才能執行此過程。
較低兼容級別和級別 100 之間的差異
| 對于多語句表值函數,在創建它們時,無論會話級別設置如何,QUOTED_IDENTIFER 設置始終為 ON。 | 在創建多語句表值函數時,會遵循 QUOTED IDENTIFIER 會話設置。 | 中 | ||||
| 在創建或更改分區函數時,會評估函數中的 datetime 和 smalldatetime 文字,并假定語言設置為 US_English。 | 使用當前語言設置來評估該分區函數中的 datetime 和 smalldatetime 文字。 | 中 | ||||
| INSERT 和 SELECT INTO 語句中允許使用(但會忽略)FOR BROWSE 子句。 | INSERT 和 SELECT INTO 語句中不允許使用 FOR BROWSE 子句。 | 中 | ||||
| OUTPUT 子句中允許使用全文謂詞。 | OUTPUT 子句中不允許使用全文謂詞。 | 低 | ||||
| 不支持 CREATE FULLTEXT STOPLIST、ALTER FULLTEXT STOPLIST 和 DROP FULLTEXT STOPLIST。系統非索引字表自動與新的全文索引相關聯。 | 支持 CREATE FULLTEXT STOPLIST、ALTER FULLTEXT STOPLIST 和 DROP FULLTEXT STOPLIST。 | 低 | ||||
| MERGE 不作為保留關鍵字強制應用。 | MERGE 是完全保留的關鍵字。在 100 和 90 兼容級別下,都支持 MERGE 語句。 | 低 | ||||
| 使用 INSERT 語句的 <dml_table_source> 參數會引發語法錯誤。 | 您可以捕獲嵌套的 INSERT、UPDATE、DELETE 或 MERGE 語句中 OUTPUT 子句的結果,然后將這些結果插入目標表或視圖。這通過使用 INSERT 語句的 <dml_table_source> 參數來實現。 | 低 | ||||
| 除非指定 NOINDEX,否則 DBCC CHECKDB 或 DBCC CHECKTABLE 將對單個表或索引視圖及其所有非聚集索引和 XML 索引同時執行物理和邏輯一致性檢查。不支持空間索引。 | 除非指定 NOINDEX,否則 DBCC CHECKDB 或 DBCC CHECKTABLE 將對單個表及其所有非聚集索引同時執行物理和邏輯一致性檢查。但是,在默認情況下,僅對 XML 索引、空間索引和索引視圖執行物理一致性檢查。 如果指定了 WITH EXTENDED_LOGICAL_CHECKS,則將對索引視圖、XML 索引和空間索引(如果存在)執行邏輯檢查。默認情況下,先執行物理一致性檢查,然后執行邏輯一致性檢查。如果還指定了 NOINDEX,則僅執行邏輯檢查。 | 低 | ||||
| 如果將 OUTPUT 子句和數據操作語言 (DML) 語句一起使用,并且在語句執行過程中發生運行時錯誤,則會終止并回滾整個事務。 | 如果將 OUTPUT 子句和數據操作語言 (DML) 語句一起使用,并且在語句執行過程中發生運行時錯誤,則行為取決于 SET XACT_ABORT 設置。如果 SET XACT_ABORT 設置為 OFF,則由使用 OUTPUT 子句的 DML 語句所生成的語句中止錯誤將終止該語句,但批處理的執行仍會繼續,并且不會回滾事務。如果 SET XACT_ABORT 設置為 ON,則由使用 OUTPUT 子句的 DML 語句所生成的全部運行時錯誤都將終止批處理,并回滾事務。 | 低 | ||||
| CUBE 和 ROLLUP 不作為保留關鍵字強制應用。 | CUBE 和 ROLLUP 是 GROUP BY 子句中的保留關鍵字。 | 低 | ||||
| 對 XML anyType 類型的元素應用嚴格驗證。 | 對 XML anyType 類型的元素應用寬松驗證。有關詳細信息,請參閱通配符組成部分和內容驗證。 | 低 | ||||
| 數據操作語言語句不能查詢或修改特殊屬性 xsi:nil 和 xsi:type。 這意味著 /e/@xsi:nil 失敗,同時 /e/@* 忽略 xsi:nil 和xsi:type 屬性。但是,/e 返回xsi:nil 和 xsi:type 屬性,以保持與 SELECT xmlCol 的一致性,即使xsi:nil = "false" 也是如此。 | 特殊屬性 xsi:nil 和 xsi:type 作為常規屬性存儲,不能查詢和修改。 例如,執行查詢 SELECT x.query('a/b/@*') 會返回包括 xsi: nil 和xsi: type 在內的所有屬性。若要在查詢中排除這些類型,請用@*[namespace-uri(.) != "insert xsi namespace uri" 替換@*,而不是用(local-name(.) = "type" 或 local-name(.) ="nil" 來替換。 | 低 | ||||
| 用于將 XML 常量字符串值轉換為 SQL Server datetime 類型的用戶定義函數被標記為確定的。 | 用于將 XML 常量字符串值轉換為 SQL Server datetime 類型的用戶定義函數被標記為不確定的。 | 低 | ||||
| 不完全支持 XML 聯合和列表類型。 | 完全支持聯合和列表類型,包括以下功能:
| 低 | ||||
| 當視圖或內聯表值函數中包含 xQuery 方法時,不對該方法所需的 SET 選項進行驗證。 | 當視圖或內聯表值函數中包含 xQuery 方法時,對該方法所需的 SET 選項進行驗證。如果該方法的 SET 選項設置不正確,將引發一個錯誤。 有關所需選項設置的詳細信息,請參閱設置選項(XML 數據類型)。 | 低 | ||||
| 包含行尾字符(回車符和換行符)的 XML 屬性值不根據 XML 標準進行規范化。即返回回車符和換行符,而不是單個換行符。 | 包含行尾字符(回車符和換行符)的 XML 屬性值會根據 XML 標準進行規范化。也就是說,外部已分析實體(包括文檔實體)中的所有換行符都會在輸入時進行規范化,方法是將兩字符序列 #xD #xA 和后面沒有跟 #xA 的所有 #xD 都轉換為單個 #xA 字符。 使用屬性來傳輸包含行尾字符的字符串值的應用程序接收到的這些字符將和提交時有所不同。若要避免規范化過程,請使用 XML 數字字符實體對所有行尾字符進行編碼。 | 低 | ||||
| ROWGUIDCOL 和 IDENTITY 列屬性可能錯誤地命名為約束。例如,CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) 語句可以執行,但約束名不會保留,也無法讓用戶訪問。 | ROWGUIDCOL 和 IDENTITY 列屬性不能命名為約束。返回錯誤 156。 | 低 | ||||
| 使用雙向賦值(如 UPDATE T1 SET @v = column_name = <expression>)來更新列會產生意外后果,因為在語句執行過程中,可以在其他子句(如 WHERE 和 ON 子句)中使用變量的實時值,而不是使用語句起始值。這會導致謂詞的含義無法預測地逐行變化。 只有在兼容級別設置為 90 時,此行為才適用。 | 使用雙向賦值來更新列會產生預期的結果,因為在語句執行過程中,只會訪問列的語句起始值。 | 低 | ||||
| 在包含頂級 UNION 運算符的語句中,允許使用變量賦值,但會返回意外的結果。例如,在以下語句中,將來自兩個表的聯合的 EmployeeID 列的值賦給局部變量@v。按照定義,如果 SELECT 語句返回多個值,則將返回的最后一個值賦給變量。在這種情況下,會正確地將最后一個值賦給變量,但還會返回 SELECT UNION 語句的結果集。
| 在包含頂級 UNION 運算符的語句中不允許變量賦值。返回錯誤 10734。 若要糾正該錯誤,請重寫查詢,如下例所示。
| 低 | ||||
| ODBC 函數 {fn CONVERT()} 使用語言的默認日期格式。對于有些語言,默認格式為 YDM,這會導致在將 CONVERT() 與要求使用 YMD 格式的其他函數(如 {fn CURDATE()})結合使用時出現轉換錯誤。 | 在轉換為 ODBC 數據類型 SQL_TIMESTAMP、SQL_DATE、SQL_TIME、SQLDATE、SQL_TYPE_TIME 和 SQL_TYPE_TIMESTAMP 時,ODBC 函數 {fn CONVERT()} 使用樣式 121(一種獨立于語言的 YMD 格式)。 | 低 | ||||
| ODBC 函數 {fn CURDATE()} 僅返回“YYYY-MM-DD”格式的日期。 | ODBC 函數 {fn CURDATE()} 同時返回日期和時間,例如“YYYY-MM-DD hh:mm:ss”。 | 低 | ||||
| 日期時間內部函數(如 DATEPART)不需要字符串輸入值,即可成為有效的日期時間文字。例如,SELECT DATEPART (year, '2007/05-30') 可以成功編譯。 | 日期時間內部函數(如 DATEPART)需要字符串輸入值,才能成為有效的日期時間文字。在使用無效的日期時間文字時,會返回錯誤 241。 | 低 | ||||
二、DBA應該記住的系統存儲過程:
| 系統存儲過程 | 用處 |
| sp_help | 查看對象的相關說明 |
| sp_helpdb | 查看數據庫的相關屬性 |
| sp_who | 列出目前連接屬性 |
| sp_dboption | 設置數據庫的屬性 |
| sp_tableoption | 設置數據表的選項 |
| sp_configure | 配置SQLServer服務器 |
| sp_executesql | 執行SQL語句 |
| sp_helptext | 查看對象內容 |
| sp_lock | 查看數據庫鎖定情況 |
| sp_who2 | 顯示連接的被鎖定情況 |
| sp_depends | 查看對象的依賴對象 |
| sp_addmessage | 增加系統信息 |
轉載于:https://www.cnblogs.com/lonelyxmas/p/4315023.html
總結
以上是生活随笔為你收集整理的DBA查询命令积累——不断更新的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】C#获取当前路径7种方法
- 下一篇: BZOJ 1070 修车