成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 數(shù)據(jù)庫安裝包和升級包腳本工具RedGate使用介紹

數(shù)據(jù)庫安裝包和升級包腳本工具RedGate使用介紹

熱門標簽:漯河電銷回撥外呼系統(tǒng) 美國地圖標注軟件下載 怎么修改高德地圖標注 電話機器人怎么看余額 長沙外呼系統(tǒng)平臺 城市地圖標志怎么標注 西安電話自動外呼系統(tǒng) 合肥crm外呼系統(tǒng)加盟 硅基電話機器人官網(wǎng)

這篇日志記錄一下我在公司所學習到的數(shù)據(jù)庫安裝包的設計。正好這些內(nèi)容也是我最近工作遇到的一些問題,在此記錄并分享一下。

  在產(chǎn)品的開發(fā)和版本更新過程中,數(shù)據(jù)庫的結構難免會一直發(fā)生變化。為了盡量減少升級時的工作量,設計一個好的數(shù)據(jù)庫升級方式就顯得很重要。在設計數(shù)據(jù)庫安裝包時,既要考慮到全新安裝時如何生成默認數(shù)據(jù),也要考慮從老版本升級時舊的數(shù)據(jù)如何遷移如有必要)。

基本上,安裝包可以分成三個部分:Pre-script,數(shù)據(jù)庫安裝或升級和Post-script。

一、數(shù)據(jù)庫安裝或升級

  首先,我們使用到的是Red Gate工具。這個工具會自動比較現(xiàn)有數(shù)據(jù)庫和目標數(shù)據(jù)庫在結構上的差異,并自動生成一個腳本進行升級(實際上是執(zhí)行一連串的SQL語句)。這是個很好的工具,推薦使用(好像要收錢),可以減少很多的工作量。

  如果Red Gate發(fā)現(xiàn)目標表在舊版本的數(shù)據(jù)庫不存在,它會自動創(chuàng)建這個表并設置好主鍵、外鍵和其他約束。這個沒什么要說的。

  如果目標表已經(jīng)存在,那么就會對原有的表進行更新,在此要特別注意要更改的表結構如何變化。舉個例子:

  我們原來有一張UserParameter表,結構如下:

  現(xiàn)在,我們希望增加一個ParameterType字段,與UserId字段構成聯(lián)合主鍵: 


此時,如果舊版本的數(shù)據(jù)庫有數(shù)據(jù),在升級過程中添加新字段后由于ParameterType為空,會導致表的結構修改失敗,這樣安裝包就會出錯。

  解決方法是為這個字段加一個默認值。一般做法是在數(shù)據(jù)庫項目的Schema Objects – Tables – Contraints下加一個Default Constraint的約束:

復制代碼 代碼如下:

ALTER TABLE [TMS].[UserParameters]
   ADD CONSTRAINT [DF_UserParameters_Type]
   DEFAULT N'SU'
   FOR [ParameterType]

二、Pre-script和Post-script

 一般來說,大部分數(shù)據(jù)表的結構變化都可以又RedGate自動完成,我們要做的只是注意設置好默認值即可。但還有一些其他情況需要自行書寫腳本來完成,這里舉幾個例子。


1.默認數(shù)據(jù)
  默認數(shù)據(jù)是在數(shù)據(jù)庫創(chuàng)建完后加上的。我們可以在Post-script中加一個名為DefaultData.sql的腳本,范例如下:

復制代碼 代碼如下:

SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRANSACTION
-- New default for FloorAlertOrder
IF NOT EXISTS (SELECT 1 FROM TMS.[FloorAlertOrder] WHERE [ModeId] = 1 and [TypeId] = 7)
   INSERT INTO [TMS].[FloorAlertOrder] ([TypeId], [Ordinal], [ModeId]) VALUES (7, 10, 1)

-- TMS.User

IF NOT EXISTS (SELECT 1 from [TMS].[User] where XRef = 'Host')
    INSERT INTO [TMS].[User]
           ([Active]
           ,[XRef]
           ,[LastName]
           ,[FirstName]
           ,[UserName]
           ,[CreationTime]
           ,[Dealer]
           ,[CasinoHost]
           ,[DomainName]
           ,[CMSUserName])
     VALUES
           (1
           ,'Host'
           ,'Host'
           ,'Host'
           ,'Host'
           ,GETUTCDATE()
           ,0
           ,0
           ,'Host'
           ,'Host')
COMMIT TRANSACTION
GO

這個腳本唯一要考慮的就是數(shù)據(jù)庫不一定是空的,可能是升級來的,所以就需要判斷一下原來有沒有數(shù)據(jù)。另外在寫這些腳本時最好放在事務中,安裝失敗時可以把未提交的數(shù)據(jù)撤銷掉,這樣用戶在排查了問題之后就可以直接重新再安裝一次。

2. 某個字段發(fā)生變化

  比如我們有一張Rating表,里面有一個TerminalId字段,原來是VARCHAR類型,記錄的是機器名。現(xiàn)在我們的新版本把這個字段的類型改成int類型,并加一個關聯(lián)到Terminal表的外鍵約束。針對這種情況,就需要我們自己寫一個腳本了。

  首先肯定不能放在Post-script里。在安裝數(shù)據(jù)庫的過程中,安裝程序會嘗試把字段改成int類型并加上外鍵約束,如果數(shù)據(jù)庫里本身有數(shù)據(jù),會導致轉換成int失敗或者外鍵約束不成立。

  為此,我們可以在Pre-script里面,把這些數(shù)據(jù)首先在Terminal表中查出來并更新:

復制代碼 代碼如下:

BEGIN TRANSACTION
BEGIN TRY
 
IF EXISTS(select 1 from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'Rating' and COLUMN_NAME = 'TerminalId' and DATA_TYPE = 'varchar')
BEGIN
 
    DECLARE @defaultTerminalId NVARCHAR(64) = (SELECT TOP 1 TerminalId FROM TMS.Terminal ORDER BY TerminalId ASC)
 
    UPDATE r
    SET r.TerminalId = ISNULL(t.TerminalId, @defaultTerminalId)
    FROM TMS.Rating r
    LEFT JOIN TMS.Terminal t ON r.TerminalId = t.NAME
 
END
    COMMIT TRANSACTION
END TRY
 
BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK
END CATCH
 
GO


最開始,我們還是要考慮到多種情況:如果是從老版本升級,那么TerminalId字段的類型就是varchar,此時需要進行轉換。如果不是(比如全新安裝;或是上一個版本已經(jīng)轉換成int了,下一個版本時這個Pre-script還是會執(zhí)行,所以也要考慮這種情況),就進行轉換。

  腳本中,直接把查詢到的Terminal表的TerminalId更新到Rating表中,找不到的用默認值代替(int可以轉換成varchar,如果寬度足夠的話;此外,該列也可以為NULL值)。這樣,執(zhí)行完這個Pre-script后就已經(jīng)是目標值了,剩下的列的類型轉換和外鍵約束就交給Red Gate即可。

  UPDATE語句也可以Join其他表,這一點很有意思,大家可以學習一下這條語句。

  3. 某張表被刪除了

  如果有一張表不需要了,那么Red Gate會直接把它刪掉。但如果這些數(shù)據(jù)還需要(比如存到別的系統(tǒng)中了),就要用Pre-script把這些數(shù)據(jù)存到別的地方去,否則安裝完后在Post-script執(zhí)行前表和數(shù)據(jù)就都沒有了。

  比如我們有一張UserCard表,新版本中這些數(shù)據(jù)是由另一個系統(tǒng)負責,為此我們需要把這些數(shù)據(jù)轉移到另一個系統(tǒng)中去。

  可以指定Red Gate升級的Schema類型,比如我們這只管TMS下的所有表,對于其他schema下的表直接忽略。利用這一點,可以在Pre-script中將這些數(shù)據(jù)移到dbo下:

復制代碼 代碼如下:

-- Backup UserCard data, so that we could transfer them to SBDB when installing TMS
 
BEGIN TRANSACTION
BEGIN TRY
 
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TempUserCard' AND TABLE_SCHEMA = 'dbo')
    DROP TABLE [dbo].[TempUserCard]
 
CREATE TABLE [dbo].[TempUserCard] (UserCardId BIGINT NOT NULL, UserId BIGINT NOT NULL, CardInfo NVARCHAR(256) NOT NULL)
 
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'UserCard' AND TABLE_SCHEMA = 'TMS')
BEGIN
 
    INSERT INTO [dbo].[TempUserCard]
        SELECT UserCardId, UserId, CardInfo FROM [TMS].[UserCard]
 
END
 
COMMIT TRANSACTION
END TRY
 
BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK
END CATCH
 
GO

 這樣,在數(shù)據(jù)庫安裝完后,數(shù)據(jù)就在dbo.TempUserCard表中。這時在其他組件的安裝程序、或者Post-script、或者其他系統(tǒng)中就可以把這些表轉移過去。

  使用這種設計應該能應對大多數(shù)情況,當然我們在設計數(shù)據(jù)庫的結構時就應該盡量考慮周全,以免頻繁修改數(shù)據(jù)表的結構造成Pre-script和Post-script非常多且亂。在確認某些script用不到的情況下,我們也可以把它刪除掉。

您可能感興趣的文章:
  • 5個常用的MySQL數(shù)據(jù)庫管理工具詳細介紹
  • 批處理寫的 oracle 數(shù)據(jù)庫備份還原工具

標簽:撫順 文山 瀘州 廣西 吉林 玉溪 商洛 濟源

巨人網(wǎng)絡通訊聲明:本文標題《數(shù)據(jù)庫安裝包和升級包腳本工具RedGate使用介紹》,本文關鍵詞  數(shù)據(jù)庫,安裝,包,和,升級,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《數(shù)據(jù)庫安裝包和升級包腳本工具RedGate使用介紹》相關的同類信息!
  • 本頁收集關于數(shù)據(jù)庫安裝包和升級包腳本工具RedGate使用介紹的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美激情午夜| 国产精品一区二区三区网站| 亚洲国产一区二区久久久777| 日韩免费观看一区二区| 国产农村妇女毛片精品| 国产专区一区二区三区| 欧美 日韩 成人| 亚洲精品免费视频| 男人扒开美女尿口无遮挡图片| 精品乱子伦一区二区| heyzo在线观看| 欧美精品乱码久久久久久按摩| 无码国产精品高潮久久99| 久久精品免费电影| 免费人成自慰网站| 国产精品香蕉国产| 中文字幕视频在线观看| gogo亚洲国模私拍人体| 久久一日本道色综合久久| 亚洲综合丁香| 97成人精品区在线播放| 国产精品精品软件视频| 日韩亚洲视频| 中文字幕一区在线观看视频| 久久成人精品无人区| 欧美激情videoshd| 国产网站在线播放| 欧美伊人久久久久久午夜久久久久| 亚洲韩国精品一区| 99久久久国产精品免费调教网站| 欧美刺激性大交免费视频| 亚洲第一久久影院| 成人av先锋影音| 中文字幕一区二区三区视频| 美女在线观看视频一区二区| 尤物网在线观看| 日本学生初尝黑人巨免费视频| 国产精品久久久久久福利| 在线亚洲色图| 日韩精品一区二区三区视频| 日产精品久久久| 国产欧美123| 日本三级在线播放完整版| 男人晚上看的视频| 国产有码在线观看| 美女网站视频久久| 欧美成人午夜77777| 免费黄频在线观看| 国产日韩网站| 丝袜连裤袜欧美激情日韩| 免费cad大片在线观看| 538任你躁在线精品免费| av资源亚洲| 美女一区二区视频| 中文字幕中文字幕在线中文字幕三区| 99热这里有精品| 日韩av电影院| 免费91在线视频| 国产精品一区二区婷婷| 国产美女自慰在线观看| 羞羞网站在线观看| 天干夜夜爽爽日日日日| 91精选在线观看| 最新精品视频在线| 国产午夜在线一区二区三区| 我家有个日本女人| 国产在线视频欧美一区二区三区| 天堂中文资源在线| 国产在线免费av| sm久久捆绑调教精品一区| 少妇高潮惨叫久久久久| 欧美午夜一区二区福利视频| 精品国产sm最大网站免费看| 中文字幕va一区二区三区| 欧美网站大全在线观看| 久久男人中文字幕资源站| h视频在线免费| 美女羞羞视频在线观看| 国产日韩在线精品av| 成人免费看片98| 国产日韩精品中文字无码| 欧美成人tv| 黄色精品在线看| se在线视频| 亚洲日本一区二区三区在线不卡| 亚洲福利影院| 粉嫩在线一区二区三区视频| 青青草视频在线视频| 欧美变态另类刺激| 日本少妇久久久| 欧美日一区二区在线观看| 超碰在线免费av| 欧美精品中文字幕一区| 在线播放中文字幕一区| 一级毛片免费看| 精品国产中文字幕| 亚洲午夜精品久久| 男人在线资源站| 成人免费大片黄在线播放| 国产精品男女视频| 成人午夜电影久久影院| 成人性生交大片免费看96| 午夜久久tv| 一级黄在线观看| 青青草原在线免费观看| 亚洲v天堂v手机在线| 视频一区二区欧美| 噜噜噜天天躁狠狠躁夜夜精品| 九色porny自拍视频在线观看| 超碰超碰人人人人精品| 91免费视频污| 久久精品一级爱片| 香蕉视频一区二区三区| 欧美国产高清| 成人影视在线播放| 韩国主播福利视频一区二区三区| 亚洲美女自拍视频| 二区三区不卡不卡视频| 国产欧美综合一区二区三区| 亚洲专区区免费| 青青免费在线视频| 亚洲欧美日韩在线不卡| 女人一区二区三区| 色噜噜狠狠狠综合欧洲色8| 久久精品导航| 欧美色18zzzzxxxxx| 日韩av男人天堂| 亚州精品国产精品乱码不99按摩| 麻豆网在线观看| 精品一区二区三区的国产在线观看| 久草视频手机在线观看| 欧美一区二区三区性视频| 三妻四妾的电影电视剧在线观看| 日韩大片一区二区| 国产调教在线观看| 日韩欧美在线网址| 蜜桃一区二区三区四区| 岛国片av在线| 欧美亚洲在线日韩| 成人免费黄色大片| 黄瓜视频在线观看| 国产女人在线视频| 狠狠色狠狠色综合网| 中文字幕永久视频| 热re99久久精品国99热蜜月| 91精品国产乱码久久久久| www.亚洲人.com| 亚洲一区免费在线观看| 国产成人在线网站| 99在线国产| 午夜免费福利影院| 成人妖精视频yjsp地址| 亚洲va中文在线播放免费| 污视频网站免费观看| 国产精品伦理在线| 日韩久久综合| 俄罗斯av网站| 欧美日韩免费观看视频| 澳门成人av| 亚洲精品v天堂中文字幕| 久久一区亚洲| 中文字幕在线永久在线视频2020| 91在线国产观看| 男人天堂av网| 国产小视频福利在线| 久久精品.com| 国产在线看片免费视频在线观看| 欧美又粗又长又爽做受| 99精品在免费线中文字幕网站一区| 欧美日韩黄色影视| 午夜不卡av在线| 金瓶狂野欧美性猛交xxxx| 国产v在线观看| 一本一道精品欧美中文字幕| 青青在线视频一区二区三区| 狠狠躁夜夜躁人人爽视频| 国产xxx免费观看| 亚洲欧洲精品一区二区| 日韩精品久久久久久久玫瑰园| 你懂的视频网| 亚洲黄色网址大全| 成人晚上爱看视频| 男女曰b免费视频| 男女爱爱视频网站| 亚洲电影第三页| 99这里有精品| 久久国产精品精品国产色婷婷| 亚洲精品1234| 韩国黄色一级片| 日韩成人av影视| 懂色av中文字幕| 亚洲精品国产setv| 日本视频免费高清一本18| 中文字幕在线天堂| 风间由美性色一区二区三区四区| 四虎影视一区二区| 欧美日本韩国一区二区三区视频| av电影网站在线观看| 成人激情开心网| 国产精品成人v| 久久精品卡一| 国产色综合网| 日韩电影中文 亚洲精品乱码| 另类天堂视频在线观看| 又黄又www的网站| 雨宫琴音一区二区在线| 麻豆91精品91久久久| 91精品国模一区二区三区| 亚洲国产成人精品视频| 老鸭窝一区二区| 亚洲一区精品视频在线观看| 国产va在线播放| 亚洲成人亚洲激情| 亚洲娇小娇小娇小| 黄网免费视频| 丰满熟女一区二区三区| 久久久精品国产一区二区| 日韩欧美三级在线观看| 国产日韩精品久久久| 在线最新版中文在线| 久久亚洲免费| 精品国产日韩欧美| www.亚洲男人天堂| 白白色 亚洲乱淫| 九色国产蝌蚪视频| 久久久久久蜜桃| 超碰公开在线| 欧美一二三区在线观看| 国产精品久久91| 欧美三级电影一区| 68国产成人综合久久精品| 欧美野外性xxxxfeexxxx| 欧美极品xxx| 日韩视频免费中文字幕| 亚洲成av人片一区二区| 成人综合激情网| 国产一区欧美二区三区| 欧美片在线播放| 亚洲综合av影视| 国产精彩视频一区二区| 欧美日韩免费看片| 成人性生交视频免费观看| 久久久精品免费视频| 四虎精品一区二区| 久久av高潮av无码av喷吹| 欧美成人黄色| 欧美黑人欧美精品刺激| 日韩欧美理论片| 欧美大片在线观看一区| www.com日本| 精品国内片67194| 国产激情视频在线播放| 日本精品久久电影| 亚洲自拍电影| 精品国产一区二区三区香蕉沈先生| 久久免费资源| 亚洲精品国产综合区久久久久久久| 中文字幕在线观看免费| 91免费精品国偷自产在线在线| 国产亚洲精品久久飘花| 一本大道一区二区三区| 95av在线视频| 国产在线天堂www网在线观看| 国产伪娘ts一区| 日韩久久精品一区二区三区| 国产91色在线|| 涩涩视频在线观看免费| 国产欧美日韩不卡免费| 中文字字幕一区二区三区四区五区| 国产黄色在线看| 欧美风情在线视频| 日韩视频在线一区二区| 好吊视频一区二区三区四区| 欧美韩国理论所午夜片917电影| 制服丝袜亚洲色图| 日韩电影中文字幕一区| 日本福利在线| 免费观看av网站| 亚洲欧美日韩在线播放| 天堂av免费在线| 亚洲一区二区三区久久久| 99国产成+人+综合+亚洲欧美| 亚洲日本一区二区三区在线观看| 秋霞午夜一区二区三区视频| 在线亚洲美日韩| 国产不卡免费视频| 国产精品视频免费观看www| 2019天天操夜夜操| 麻豆精品国产| 欧美久久久影院| 在线手机福利影院| 精品乱色一区二区中文字幕| 久久综合九色综合欧美狠狠| 波多野结衣mp4| 精品国产sm最大网站免费看| 免费福利视频网站| 在线免费观看日本欧美| 日韩国产专区| 日韩精品123区| 国产一卡二卡在线播放| 亚洲在线激情| 黄色网战在线观看| 国产精品福利无圣光在线一区| 97夜夜澡人人双人人人喊| av中文字幕播放| 日本一区二区三区在线视频| av成人国产| 色综合久久天天| 国产精品视频一区二区三区经| 黄色在线免费| 99综合精品| 四虎精品一区二区| 欧美午夜春性猛交xxxx| 国产精品玖玖玖| 国产精品视屏| 国产激情偷乱视频一区二区三区| 久久精品国产综合精品| 欧美国产在线观看| 日本中文字幕在线不卡| 欧美oldwomenvideos| 亚洲国产清纯| 在线观看黄色小视频| 无国产精品白浆是免费| 日本精品久久久久久久久久| 欧美 国产 日本| 福利片免费在线观看| 中文字幕一区av| 国产一区二区三区四区五区美女|