2つの異なるサーバー(.246と.252)に2つのデータベースがあります。すべてのストアドプロシージャ、トリガー、関数のバックアップを252サーバーから作成し、246に復元する必要があります。両方のサーバーのserver.database名はトランスクレジットです。約500SPは252サーバーにあります。誰か私を助けてくれますか?
あなたはあなたの質問をやや誤解を招くように構成していると思います。
1つのサーバーからすべてのストアドプロシージャ、トリガー、および関数をスクリプト化し、それらを新しいサーバー上に作成します。
オプション1:SSMSの使用
オプション2:TSQLの使用-sys.sql_modules with sys.objects
すべての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