日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

SQL Server 修改表結(jié)構(gòu)并保留數(shù)據(jù)

系統(tǒng) 2681 0

客戶需求:修改一張表的結(jié)構(gòu),并保留里面的數(shù)據(jù)。

解決方案:

  1. 修改表名
  2. 用原表名創(chuàng)建一個(gè)新的表
  3. 用腳本把原表數(shù)據(jù)遷移到新表中
  4. 刪除原表

具體實(shí)現(xiàn):

  1. 修改表名:把表Customer重命名為Customer_REN

    EXEC sp_rename 'Customer','Customer_REN'

    執(zhí)行完后會(huì)有如下警告:Caution: Changing any part of an object name could break scripts and stored procedures.

    如果現(xiàn)有查詢、視圖、用戶定義函數(shù)、存儲(chǔ)過程引用該表,則更改表名將使這些對(duì)象無效。當(dāng)然我們后來會(huì)添加一個(gè)新的Customer表,但如果原表中的字段有刪除或更改,一樣會(huì)影響到視圖、用戶定義函數(shù)、存儲(chǔ)過程,所以要注意檢查。

    更改表后最好刪除外鍵,因?yàn)楹竺嫣砑有碌腃ustomer表后添加外鍵約束時(shí),外鍵名稱可能會(huì)沖突。

    查詢外鍵:以下SQL語句就可以查詢出Customer_REN表下的所有外鍵名稱。

    SELECT name?from? sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id ?WHERE?f.parent_object_id=object_id('Customer_REN')

    刪除外鍵:ALTER TABLE Customer_REN?DROP CONSTRAINT 外鍵名稱

  2. 用原表名創(chuàng)建一個(gè)新的表

    在SQL Server Manager Studio中設(shè)計(jì)好一張表后,右鍵表名 > Script Table as > CREATE To > New Query Editor Window就可以把創(chuàng)建該表的腳本生成出來,注意檢查生成的腳本,里面包含了數(shù)據(jù)庫(kù)名稱,如果你只是向客戶提供腳本去他的數(shù)據(jù)庫(kù)上運(yùn)行,你們的數(shù)據(jù)庫(kù)名可能會(huì)不一樣,這樣就需要把腳本里面的數(shù)據(jù)庫(kù)名刪除。

  3. 用腳本把原表中的數(shù)據(jù)導(dǎo)入到新表中

    INSERT INTO Customer(Field1,Field2,...)
    SELECT Field1,Field2,....
    FROM Customer_REN

    如果新表中添加了新的外鍵約束,遷移數(shù)據(jù)往往會(huì)碰到臟數(shù)據(jù)導(dǎo)致數(shù)據(jù)遷移失敗,下面簡(jiǎn)單介紹一下如何刪除臟數(shù)據(jù)( dirty data )。?

    這里的臟數(shù)據(jù)是指你需要導(dǎo)入的數(shù)據(jù)在外鍵關(guān)聯(lián)的另一張表中沒有對(duì)應(yīng)的數(shù)據(jù),那么你這條數(shù)據(jù)就是臟數(shù)據(jù),是不允許被插入進(jìn)去的,需要?jiǎng)h除。

    首先查詢出臟數(shù)據(jù):

    SELECT *
    FROM Customer AS c
    LEFT JOIN Person AS p
    ON c.PersonGuid = p.PersonGuid
    WHERE?p.PersonGuid?IS NULL

    這樣就可以查詢出Customer中的臟數(shù)據(jù)了,接下來就是刪除臟數(shù)據(jù),刪除臟數(shù)據(jù)分兩種情況:

    如果Customer中的PersonGuid是個(gè)非空字段,就將SELECT * 替換成 DELETE c;

    如果Customer中的PersonGuid是個(gè)可空字段,則將其置為空,將SELECT * 替換成?UPDATE c SET c.PersonGuid? = null?

  4. 刪除原表

    DROP TABLE?Customer_REN

SQL Server 修改表結(jié)構(gòu)并保留數(shù)據(jù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 长沙市| 通许县| 名山县| 蕉岭县| 绍兴市| 金坛市| 梧州市| 横山县| 泸溪县| 淳安县| 广东省| 娱乐| 大丰市| 枣庄市| 南雄市| 思南县| 光山县| 碌曲县| 汤原县| 曲周县| 黔西| 铁岭县| 黄陵县| 信丰县| 金沙县| 阿瓦提县| 叙永县| 龙江县| 桃园市| 普洱| 苏尼特右旗| 方正县| 义马市| 福泉市| 磐石市| 黄冈市| 白玉县| 慈溪市| 永城市| 南昌县| 右玉县|