<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    konhon

    忘掉過去,展望未來。找回自我,超越自我。
    逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因為某個理由而傷心難過, 但我卻能找個理由讓自己快樂.

    Google

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
    復制表結構的通用存儲過程

    -- Transfer對象的重要屬性

    -- 1. 屬性

    屬性名                            類型                描述
    --------------------------------- ------------------- --------------------
    CopyAllDefaults                Boolean    所有默認值
    CopyAllObjects                 Boolean    所有對象
    CopyAllRules                   Boolean    所有規則
    CopyAllStoredProcedures        Boolean    所有存儲過程
    CopyAllTables                  Boolean    所有表
    CopyAllTriggers                Boolean    所有觸發器
    CopyAllUserDefinedDatatypes    Boolean    所有用戶自定義類型
    CopyAllViews                   Boolean    所有視圖
    CopyData                       Boolean    所有數據
    DestDatabase                   String     目標對象數據庫
    DestLogin                      String     目標數據庫登陸用戶名
    DestPassword                   String     目標數據庫登陸密碼
    DestServer                     String     目標服務器
    DestUseTrustedConnection       Boolean    用戶信任連接
    DropDestObjectsFirst           Boolean    是否先刪除目標對象
    IncludeDependencies            Boolean    是否包含依靠對象
    ScriptType                     Boolean    腳本類型

    -- 2. 重要方法: 

    方法名稱                    功能描述
    --------------------------- --------------------------
    AddObject                   增加對象
    AddObjectByName             通過對象名稱增加對象

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_CopyDB]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[P_CopyDB]
    GO

    /*-- 在 SQLServer 中使用SQLDMO.Transfer 實現數據遷移
        存儲過程實現源數據庫到目標數據庫的對象和數據的復制
        要求源數據庫和目標數據庫在同一服務器
        如果是要實現不同服務器之間的復制,則需要增加驗證信息
    --鄒建 2005.07(引用請保留此信息)--*/

    /*--調用示例

        CREATE DATABASE test
        EXEC P_CopyDB @Source_DB='northwind',@Des_DB='test'
        DROP DATABASE test
    --*/
    CREATE PROCEDURE P_CopyDB     
    @Des_DB      sysname,           --目標數據庫
    @Obj_Type    nvarchar(4000)=N'',--復制的對象類型,可以是下列字符串列表:
                                    -- O 所有對象,D 默認值,R 規則,P 存儲過程
                                    -- T 表,TR 觸發器,DT 用戶定義數據類型
                                    -- V 視圖,DATA 數據,DEL 刪除目標對象
    @Source_DB   sysname=N'',       --源數據庫
    @ServerName  sysname=N'',       --服務器名
    @UserName    sysname=N'',       --用戶名,不指定則表示使用 Windows 身份登錄
    @pwd         sysname=N''        --密碼 
    AS
    SET NOCOUNT ON
    DECLARE @srvid int,@Dbid int,@S_dbid int,@D_dbid int,@TransferID int,
        @err int,@src varchar(255), @desc varchar(255)

    IF ISNULL(@ServerName,N'')=N'' SET @ServerName=@@SERVERNAME
    IF ISNULL(@Source_DB,N'')=N'' SET @Source_DB=DB_NAME()

    --創建sqldmo對象·
    EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT
    IF @err<>0 GOTO lb_Err

    --連接服務器
    IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登錄
    BEGIN
        EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1
        IF @err<>0 GOTO lb_Err

        EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername
    END
    ELSE
        EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername,@UserName,@pwd

    IF @err<>0 GOTO lb_Err

    --獲取數據庫集
    EXEC @err=sp_oagetproperty @srvid,'databases',@Dbid OUT
    IF @err<>0 GOTO lb_Err

    --選擇源數據庫    
    EXEC @err=sp_oamethod @Dbid,'item',@S_dbid OUT,@Source_DB
    IF @err<>0 GOTO lb_Err

    --選擇目標數據庫    
    EXEC @err=sp_oamethod @Dbid,'item',@D_dbid OUT,@Des_DB
    IF @err<>0 GOTO lb_Err

    --設置復制的對象
    EXEC @err=sp_oacreate 'SQLDMO.Transfer',@TransferID OUT
    IF @err<>0 GOTO lb_Err

    --設置目標服務器信息
    EXEC @err=sp_oasetproperty  @TransferID,'DestServer',@ServerName
    IF @err<>0 GOTO lb_Err

      --設置連接用戶
    IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登錄
    BEGIN
        EXEC @err=sp_oasetproperty @TransferID,'DestUseTrustedConnection',1
        IF @err<>0 GOTO lb_Err
    END
    ELSE
    BEGIN
        EXEC @err=sp_oasetproperty @TransferID,'DestLogin',@UserName
        IF @err<>0 GOTO lb_Err

        EXEC @err=sp_oasetproperty @TransferID,'DestPassword',@pwd
        IF @err<>0 GOTO lb_Err
    END

      --設置復制對象信息
    EXEC @err=sp_oasetproperty @TransferID,'DestDatabase',@Des_DB
    IF @err<>0 GOTO lb_Err

    DECLARE tb CURSOR FAST_FORWARD LOCAL
    FOR
    SELECT Name FROM(
        SELECT KeyWord=N',D,',   Name=N'CopyAllDefaults' UNION ALL
        SELECT KeyWord=N',O,',   Name=N'CopyAllObjects' UNION ALL
        SELECT KeyWord=N',R,',   Name=N'CopyAllRules' UNION ALL
        SELECT KeyWord=N',P,',   Name=N'CopyAllStoredProcedures' UNION ALL
        SELECT KeyWord=N',T,',   Name=N'CopyAllTables' UNION ALL
        SELECT KeyWord=N',TR,',  Name=N'CopyAllTriggers' UNION ALL
        SELECT KeyWord=N',DT,',  Name=N'CopyAllUserDefinedDatatypes' UNION ALL
        SELECT KeyWord=N',V,',   Name=N'CopyAllViews' UNION ALL
        SELECT KeyWord=N',DATA,',Name=N'CopyData' UNION ALL
        SELECT KeyWord=N',DEL,', Name=N'DropDestObjectsFirst'
    )A WHERE CHARINDEX(KeyWord,
            CASE WHEN ISNULL(@Obj_Type,N'')='' THEN ',O,DATA,' ELSE @Obj_Type END)>0
    OPEN tb
    FETCH tb INTO @src
    WHILE @@FETCH_STATUS=0
    BEGIN
        EXEC @err=sp_oasetproperty @TransferID,@src,1
        IF @err<>0 GOTO lb_Err
        FETCH tb INTO @src
    END
    CLOSE tb
    DEALLOCATE tb

    --復制對象
    EXEC @err=sp_oamethod @S_dbid,'Transfer',null,@TransferID
    IF @err<>0 GOTO lb_Err

    --結束
    SET @err=0
    GOTO lb_Exit

    --錯誤處理
    lb_Err:
        EXEC sp_oageterrorinfo NULL, @src OUT, @desc OUT 
        RAISERROR(N'錯誤編號 %#x, 錯誤源 "%s", 錯誤描述 "%s"',16,1,@err,@src,@desc)
        RETURN -1

    lb_Exit:
        EXEC sp_OADestroy @Dbid  
        EXEC sp_OADestroy @srvid 
        EXEC sp_OADestroy @TransferID 
        RETURN @err
    GO

    posted on 2005-09-16 19:42 konhon 優華 閱讀(883) 評論(0)  編輯  收藏 所屬分類: MS SQL Server
    主站蜘蛛池模板: 特色特黄a毛片高清免费观看| 亚洲欧美国产精品专区久久| 久久久久久噜噜精品免费直播| 免费国产真实迷j在线观看| 久久久亚洲精华液精华液精华液 | 亚洲伦理一区二区| 久久精品免费观看| 亚洲情a成黄在线观看动漫尤物| 亚洲免费观看视频| 亚洲人成网www| 亚洲成人免费网站| 亚洲中文字幕无码中文字| 午夜成年女人毛片免费观看| 亚洲欧美乱色情图片| 免费成人在线观看| baoyu116.永久免费视频| 婷婷亚洲综合五月天小说| 91精品免费观看| 亚洲私人无码综合久久网| 国产高清在线免费视频| 一级做a爰片久久免费| 亚洲av中文无码乱人伦在线播放| 先锋影音资源片午夜在线观看视频免费播放 | 亚洲AV网站在线观看| 久久精品成人免费观看97| 久久久久亚洲AV片无码| 欧美a级成人网站免费| 国产尤物在线视精品在亚洲| 亚洲熟妇av一区二区三区漫画| 99精品在线免费观看| 亚洲一区二区三区国产精华液| 亚洲AV无码专区日韩| 99精品视频免费观看| 爱情岛论坛亚洲品质自拍视频网站| 国产亚洲一区二区三区在线不卡| 十八禁无码免费网站| 鲁死你资源站亚洲av| 久久亚洲高清观看| 白白国产永久免费视频| 国产一区二区三区免费观看在线| 最新亚洲春色Av无码专区|