web-dev-qa-db-ja.com

SQL Server 2008でデータベースのストアドプロシージャ、トリガー、および関数のバックアップを作成する方法

2つの異なるサーバー(.246と.252)に2つのデータベースがあります。すべてのストアドプロシージャ、トリガー、関数のバックアップを252サーバーから作成し、246に復元する必要があります。両方のサーバーのserver.database名はトランスクレジットです。約500SPは252サーバーにあります。誰か私を助けてくれますか?

5
Purushothaman

あなたはあなたの質問をやや誤解を招くように構成していると思います。

1つのサーバーからすべてのストアドプロシージャ、トリガー、および関数をスクリプト化し、それらを新しいサーバー上に作成します。

オプション1:SSMSの使用

enter image description here

enter image description here

enter image description here

オプション2:TSQLの使用-sys.sql_modules with sys.objects

6
Kin Shah

すべてのSPと特定のDBのビュー(関数に拡張することができます...))を通過する次のプロシージャを作成し、各コードスクリプトを1つずつTXTファイル。MSSQL 2008 R2および2014でテスト済み

最初の部分SPとビューのすべてのスクリプトを一時テーブルに挿入します。その後、後でBCPユーティリティを使用します。必要に応じて、SPではなく、SSISパッケージのエクスポートに使用できます。 =この例で行ったように。

DECLARE  @File_name AS VARCHAR(255)
        ,@Folder_path AS VARCHAR(255)
        ,@File_Path_Name AS VARCHAR(255)
        ,@CMD AS VARCHAR(8000)

IF OBJECT_ID('tempdb..#TEMP_AA') IS NOT NULL DROP TABLE #TEMP_AA;
SELECT 
 T1.NAME AS ObjectName
,T1.type AS ObjectType
,STUFF(((SELECT ' ' + T.[TEXT]
         FROM (SELECT SC.[id],SC.colid,SC.[TEXT]
               FROM SYSCOMMENTS sc
               ) AS T
         WHERE T.[id] = T1.[id]
         ORDER BY T.colid
         FOR XML PATH(''),TYPE
         ).value('.[1]', 'NVARCHAR(MAX)')
         ), 1, 1, '')
 AS ObjectText
INTO #TEMP_AA
FROM SYSOBJECTS AS T1
WHERE 1=1
  AND T1.type IN ('P', 'V') /* Procedures and Views*/
  AND NOT T1.[name] LIKE 'dt_%'

Y_YYMMDD形式の日付として接頭辞P_またはV_および接尾辞が付いたファイル名を作成するグローバル一時テーブルを通過するループ:

-- Exporting Scripts one by one into TXT files
WHILE (SELECT TOP 1 objectName FROM ##TEMP_AA) IS NOT NULL
BEGIN
    SELECT TOP 1 
    @File_name = RTRIM(LTRIM(ObjectType)) + '_' + ObjectName +'_' + REPLACE(CAST(CAST(GETDATE()AS DATE) AS VARCHAR),'-','')
    FROM #TEMP_AA;

    IF OBJECT_ID('tempdb..##TEMP_BB') IS NOT NULL DROP TABLE ##TEMP_BB;
    CREATE TABLE ##TEMP_BB (ObjectText VARCHAR(MAX));
    INSERT INTO ##TEMP_BB
    SELECT TOP 1 ObjectText
    FROM #TEMP_AA;

    --'Setting File name'
    SET @Folder_Path = 'C:\AAAA\'
    SET @File_Path_Name = @Folder_Path + @File_name + '.txt'
    SET @CMD ='BCP ##TEMP_BB OUT "'+@File_Path_Name+'" -T -c -t "Your Server"'
     -- 'Output via BCP into TXT file'
    EXEC xp_cmdshell @CMD;

    --Delete Line From temp which has been procese already
    WITH  CTE AS (SELECT TOP 1 *  FROM  #TEMP_AA)
    DELETE FROM CTE;
END 
1
Milan Minarovic

Visual StudioまたはRedgateスキーマなどのサードパーティツールにアクセスできる場合は、データベースの比較を実行して、DBから別のデータベースにコピーするオブジェクトを選択できます。ツールは、これらのオブジェクトを2番目のDBに再作成するスクリプトを作成します。

Visual Studio DB chema比較 ここ

Redgateスキーマ比較 ここ

1
James Anderson