您好,登錄后才能下訂單哦!
SQLserver中怎么在載入數(shù)據(jù)時解除對數(shù)的約束,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
當(dāng)向表中載入數(shù)據(jù)的時候,有時會不得不解除對表的約束。假定表已經(jīng)被刪減過或有損壞了, 更有可能的是表存有如外部關(guān)鍵字之類的引用完整性約束,這時數(shù)據(jù)庫不會允許向表中插入不在其它表中存在相關(guān)關(guān)系的數(shù)據(jù),如果引用列在其它的表中不存在的話,在最初裝入數(shù)據(jù)的時候可能會不得不解除對表的約束。當(dāng)然當(dāng)載入成功以后,應(yīng)該將這些約束恢復(fù)。
INPUT
SQL> SET ECHO OFF
SQL> SET FEEDBACK OFF
SQL> SET HEADING OFF
SQL> SPOOL DISABLE.SQL
SQL> SELECT 'ALTER TABLE ' || TABLE_NAME ||
2 'DISABLE CONSTRAINT ' || CONSTRAINT_NAME || ';'
3 FROM SYS.DBA_CONSTRAINTS
4 WHERE OWNER = 'RYAN'
5 /
OUTPUT
ALTER TABLE ACCT_PAY DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE ACCT_REC DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE CUSTOMERS DISABLE CONSTRAINT FK_CUSTOMER_ID;
ALTER TABLE HISTORY DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE INVOICES DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE ORDERS DISABLE CONSTRAINT FK_ACCT_ID;
這個對象已經(jīng)生成了一系列的 ALTER TABLE 語句來解除所有為 RYAN 所擁有的表,在連接符末尾的分號是為了保證每個語句的完整。
INPUT/OUTPUT
SQL> SPOOL OFF
SQL> SET ECHO OFF
SQL> SET FEEDBACK ON
SQL> START DISABLE.SQL
Constraint Disabled.
Constraint Disabled.
Constraint Disabled.
Constraint Disabled.
Constraint Disabled.
Constraint Disabled.
注意在這里 ECHO 被設(shè)置為 OFF 也是說你在執(zhí)行不會看到對應(yīng)的語句 但是由于FEEDBACK 設(shè)置為 ON 所以你可以看到結(jié)果Constraint Disabled.如果 ECHO 和 FEEDBACK 都設(shè)置成 OFF 了,在執(zhí)行時將什么都不會顯示,只是經(jīng)過一段時間的暫停以后又回到了 SQL>的提示符下,現(xiàn)在你可以放心地載入你的數(shù)據(jù)而不必擔(dān)心因為約束而導(dǎo)致的錯誤了。約束是好事但它在數(shù)據(jù)載入的時候會造成障礙也可以使用相同的思想來恢復(fù)對表的約束。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。