深度解讀ADO.NET規則相關操作
ADO.NET有很多值得學習的地方,這里我們主要介紹ADO.NET規則,在向大家詳細介紹ADO.NET規則之前,首先讓大家了解下ADO.NET,然后全面介紹ADO.NET規則的使用技巧。
如果將值裝載到帶有 char、varchar 或 varbinary 數據類型的列,尾隨空格(對于 char 和 varchar 是空格,對于 varbinary 是零)的填充和截斷是由 SET ANSI_PADDING 設置確定的。該設置是在創建表時為列定義的。有關更多信息,請參見 SET ANSI_PADDING。下表顯示 SET ANSI_PADDING 為 OFF 時的默認操作。
數據類型 默認操作
Char 將帶有空格的值填充到已定義的列寬。ADO.NET規則 刪除最后的非空格字符后面的尾隨空格,而對于只由空格組成的字符串,一直刪除到只留下一個空格字符。Varbinary 刪除尾隨的零。
如果將一個空字符串 (' ') 裝載到帶有 varchar 或 text 數據類型的列,那么默認操作是裝載一個零長度的字符串。如果數據庫的兼容級別小于 70,那么將該值轉換成單個空格。有關更多信息,請參見 sp_dbcmptlevel。
如果 INSERT 語句違反約束或規則,或者它有與列的數據類型不兼容的值,那么該語句就會失敗,并且 SQL Server 顯示錯誤信息。將空值插入到ADO.NET規則或 image 列不能創建有效的文本指針,也不能預分配 8 KB 的文本頁。有關插入 text 和 image 數據的更多信息,請參見使用 text、ntext 和 image 函數。
如果 INSERT 正在使用 SELECT 或 EXECUTE 裝載多行,正在裝載的值中出現任何違反規則或約束的行為都會導致整個語句終止,從而不會裝載任何行當向遠程 SQL Server 表中插入值且沒有為所有列指定值時,則用戶必須標識將向其中插入指定值的列。#t#
在本地和遠程分區視圖上,忽略 ADO.NET規則語句的 SET ROWCOUNT 選項的設置。而且,當兼容級別設置為 80 時,在 SQL Server 2000 中的遠程表上也不支持 INSERT 語句的 SET ROWCOUNT 選項。
當為表或視圖的 INSERT 操作定義了 INSTEAD-OF 觸發器時,該觸發器就會執行 INSERT 語句中的ADO.NET規則。以前的 SQL Server 版本只支持在 INSERT 中定義的 AFTER 觸發器,以及其它數據修改語句。
如果在表達式賦值過程中 INSERT 語句遇到算術錯誤(溢出、被零除或域錯誤),那么 SQL Server 會處理這些錯誤,就好像 SET ARITHABORT 是 ON 一樣。批處理的其余部分將終止,并且會返回一條錯誤信息。
權限
默認情況下,INSERT 權限被授予 sysadmin 固定服務器角色成員,ADO.NET規則和 db_datawriter 固定數據庫角色成員,以及表的所有者。sysadmin、db_owner 和 db_securityadmin 角色成員和表所有者可以將權限轉讓給其他用戶。