1. 程式人生 > >批量修改資料庫排序規則,含主外來鍵

批量修改資料庫排序規則,含主外來鍵

----------------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date   : 2011-05-17 17:25:07
-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
--          Jul  9 2008 14:43:34
--          Copyright (c) 1988-2008 Microsoft Corporation
--          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
-- Blog   :

http://blog.csdn.net/htl258
----------------------------------------------------------------------------------

---以下指令碼未進行大規模測試,操作前請先備份資料庫,以便出問題時還原。有問題請留言,Ths。
--
1.生成主鍵約束指令碼並引出SELECT'ALTER TABLE '+QUOTENAME(a.TABLE_NAME)
    
+' ADD CONSTRAINT '+ a.CONSTRAINT_NAME
    
+' PRIMARY KEY ('+QUOTENAME(COLUMN_NAME)
    

+');' AS[Parmary Key SQL]FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
   
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS b
       
ON a.CONSTRAINT_NAME=b.CONSTRAINT_NAME
WHERE CONSTRAINT_TYPE='PRIMARY KEY'--2.生成外來鍵約束指令碼並引出 SELECT'ALTER TABLE '+QUOTENAME(OBJECT_NAME(a.PARENT_OBJECT_ID)) --表名+' ADD CONSTRAINT '
+OBJECT_NAME(a.OBJECT_ID) --約束名+' FOREIGN KEY ('+QUOTENAME(c.name) --欄位名+') REFERENCES '+QUOTENAME(OBJECT_NAME(a.REFERENCED_OBJECT_ID))--被引用表名+' ('+QUOTENAME(d.name)--被引用欄位名+')'+CASEWHEN a.delete_referential_action=1THEN' ON DELETE CASCADE 'ELSE''END+CASEWHEN update_referential_action=1THEN' ON UPDATE CASCADE 'ELSE''END+';'AS[Foreing Key SQL]FROM sys.foreign_keys a
   
JOIN  sys.foreign_key_columns b
       
ON a.[object_id]=b.constraint_object_id
   
JOIN sys.[columns] c
       
ON b.parent_object_id=c.[object_id]AND b.parent_column_id=c.column_id
   
join sys.[columns] d
       
ON b.referenced_object_id=d.[object_id]AND b.referenced_column_id=d.column_id

--3.刪除外來鍵約束SET NOCOUNT ONDECLARE c1 cursorforselect'alter table ['+object_name(parent_obj) +'] drop constraint ['+name+']; 'from sysobjects
    
where xtype ='F'open c1
declare@c1varchar(8000)
fetchnextfrom c1 into@c1while(@@fetch_status=0)
    
beginexec(@c1)
        
fetchnextfrom c1 into@c1endclose c1
deallocate c1
GO--4.刪除主鍵約束SET NOCOUNT ONDECLARE c1 cursorforselect'alter table ['+object_name(parent_obj) +'] drop constraint ['+name+']; 'from sysobjects
    
where xtype ='PK'open c1
declare@c1varchar(8000)
fetchnextfrom c1 into@c1while(@@fetch_status=0)
    
beginexec(@c1)
        
fetchnextfrom c1 into@c1endclose c1
deallocate c1
GO--5.修改排序規則SET NOCOUNT ONDECLARE@SNVARCHAR(1000)
DECLARE C CURSORFOR--不區分大小寫SELECT'ALTER TABLE ['+TABLE_NAME+'] ALTER COLUMN ['+COLUMN_NAME+'] '+ DATA_TYPE
        
+CASEWHEN DATA_TYPE IN('TEXT','NTEXT') THEN''ELSEQUOTENAME(CHARACTER_MAXIMUM_LENGTH,'(')
           
END+' COLLATE CHINESE_PRC_CI_AS_WS '+CASE IS_NULLABLE WHEN'NO'THEN' NOT NULL 'ELSE''ENDFROM INFORMATION_SCHEMA.COLUMNS
    
WHERE DATA_TYPE IN('varchar','nvarchar','char','nchar','text','ntext')
OPEN C
FETCH C INTO@SWHILE@@FETCH_STATUS=0BEGINEXEC(@S)
    
FETCH C INTO@SENDCLOSE C
DEALLOCATE C
GO--6.重新建立主鍵約束(執行匯出的指令碼) --7.重新建立外來鍵約束指令碼(執行匯出的指令碼)

相關推薦

批量修改資料庫排序規則外來

------------------------------------------------------------------------------------ Author : htl258(Tony)-- Date   : 2011-05-17 17:25:07-

sql server 中常用修改建立外來操作

表結構 CREATE TABLE [staff] ( [id] [varchar](50) NOT NUL L, [name] [varchar](50) NOT NULL, [password] [varchar](50) NULL, [roleid] [varchar](50) NULL, [accoun

SQL Server語句建立資料庫和表——並設定外來關係

簡單的建立資料庫的 SQL 語句: 1 use master 2 go 3 4 if exists(select * from sysdatabases where name='Test') 5 begin 6 select '該資料庫已存在' 7

SQL SERVER 語句建立資料庫和表以及設定外來關係

簡單的建立資料庫的 SQL 語句: use master go if exists(select * from sysdatabases where name='Test') begin     select '該資料庫已存在'    

SQL SERVER-增加表聯絡關聯查詢增加外來約束

      using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System

C# 資料庫dataGridView重新整理資料和外來判斷

點選按鈕"故障資訊刪除"後呼叫該函式ShowInfoQues()即可實現,通常填充資料中需要判斷語句如下,如果插入到的結果存在時資料顯示在dataGridView控制元件中,但這樣會存在一個問題,當資料庫中只存在一個數據時,刪除該資料後表中為空就不會更新dataGridView,因為此時已經沒有資料就不會執行

【mysql】mysql建立資料庫基字符集 和 資料庫排序規則 的對比選擇

1.一般選擇utf8.下面介紹一下utf8與utfmb4的區別。 utf8mb4相容utf8,且比utf8能表示更多的字元。至於什麼時候用,看你的做什麼專案了,到https://www.cnblogs.com/sxdcgaq8080/p/9932786.html看unicode編碼區從1 ~ 126就屬於傳

Collections自定義List排序規則進行自定義排序

cti str targe collect dex pre div spa out //這裏的順序,是我自己定義的一個List<String> String[] regulation = {"諸葛亮","魯班","貂蟬","呂布"}; final List&l

今天來談談Python中的各種排序總結實現代碼

pro 一個數 append 增量 ice quick 教你 指向 具體實現 下圖是各種排序方法的時間復雜度、空間復雜度和穩定性,大牛編程吧教你如何編程提升。 1.直接插入排序。 直接插入的基本思想是每一步將一個數插入到已排序的有序數列中。 python代碼實現: def

資料庫排序規則

最近做專案更新資料庫時報"無法解決 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之間的排序規則衝突。" 問題,小白一臉懵逼。經過查閱略知一二,分享一下參考資料: 感謝(https://www.cnb

Windows CMD 批量修改檔案包括照片文件資料夾名字

1, 名字隨便起的! 跟Linux一樣。Cd 可以進入你想進去的目錄! dir命令檢視目錄下的檔案列表,檢視該目錄下的所有檔案: dir /a。就可以查詢到啦! 2,進入裡面,任意找一個照片。先右鍵檢視屬性,複製路徑。用瀏覽器開啟,就可以看到! Ct

mysql 資料庫排序規則

MySQL中的排序規則。在新建MySQL資料庫或表的時候經常會選擇字符集和排序規則。資料庫用的字符集大家都知道是怎麼回事,那排序規則是什麼呢? 排序規則:是指對指定字符集下不同字元的比較規則。其特徵有以下幾點: 1、 兩個不同的字符集不能有相同的排序規則 2、 兩個字符集有一個預設的排序規則 3、 有

oracle批量修改資料庫的表結構

如果資料庫有些表的表結構相同,想修改這些表的表結構的話,使用如下語句: DECLARE      CURSOR TEMP IS SELECT TABLE_NAME  FROM USER_TABLES WHERE TABLE_NAME LIKE '  %TEST%'   

MySQL資料庫批量修改資料庫中的表

問題:今天工作遇到這樣一個問題,需要把資料庫中的所有表,每個表加入四個欄位,如果表少,我們可以手動去新增或者修改,如果是成千上百萬張表的話,我們如何去修改,現記錄下來。解決方法;找到資料庫的建模資料,就是PDM檔案。發個截圖下面我們就要用一個工具了,就是powerdesign

Oracle資料庫知道一張表查詢與其有外來關係的表

--查外來鍵表NC56.CSCI有無對應的主鍵表 SELECT a.owner, A.TABLE_NAME pr

Ubuntu 使用vim 修改.profile 真是麻煩忘。

今天在修改/etc/profile檔案時,最後忘了加:$PATH,並且log out出了系統。最後一直在登入介面迴圈進入不了系統最後通過在Recovery Mode模式下對/etc/profile檔案進行修改,最終解決了問題我使用的是Ubuntu 14版本,選擇系統啟動時的A

Linux資料庫管理——day2——基本約束、外來

使用時間函式獲得函式 now() 獲得當前時間的日期 對應datatime型別 year(字串) 獲得後面字串中指定的年 對應year型別 month(字串) 獲得後面字

Hibernate配置資料庫表一對多關係丟擲外來為空的異常

建立一個客戶對應多個聯絡員,一個聯絡員負責聯絡一個客戶的一對多的關係 將寫好的程式執行,報外來鍵link_cust_id為空的異常 然後就一直在想怎麼可能呢?程式碼、配置檔案都沒有錯啊,仔細檢查了兩個對映關係檔案中一對多和多對一的配置,實在想不通哪裡出錯了。

05----------高併發下的資料庫表或者大多數情況下不再使用外來

在學校時,我們經常使用外來鍵來關聯表格,這樣可以保證資料的一致性, 但實際上,在很多場景下,我們並不太需要保證資料的一致性,而是需要效率, 而且現在隨著分散式的流行,很多情況下一個資料庫已經不再適合使用,因此外來鍵也就不再使用 例如:商品表goods public c

聯合兩張具有外來關係的表想把其中一張表的欄位值update到另外一張表中某個欄位

今天遇到個更新問題,project與document是一對多關係,想在i想把project的Creater也更新到在document總後加的欄位Owner欄位中去,由於自己之前是寫mysqlserve