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