1

データベースのセット(B-set-DB、(約50 DB))からインポートするアプリケーションデータベース(A-DB)があります。ユーザーは、アプリケーション用にA-DBにインポートしたい「B-set-DB」の4つのDBを選択します。

B-set-DBのハードコードされた4つのDBを使用して、インポート用のストアドプロシージャ(約4000行のSQLコード)を作成しましたが、これは完璧に機能します。

だから私の質問は、インポートされたデータベース名を変数にする方法ですか?

動的SQLを4000行全体に使用することはできません。これは、関数やその他のストアドプロシージャが呼び出されるため、一時テーブルのパラメータと文字列、定義、およびサブクエリのサブクエリが多数存在するためです。他の奇妙なこと。(私はそれがすべて醜いように聞こえることを知っていますが、私はそれを実行する必要があります、私はすべてを設計しませんでした。)

おそらく、インポートストアドプロシージャの最初の行でシノニムを定義することが可能です。

ALTER PROCEDURE [dbo].[test_storedProcedure]  
(@DBName_1 nvarchar(512), @table_name_1 nvarchar(512))
AS
BEGIN
DECLARE @cmd nvarchar(max);
set @cmd = N'create synonym DB_SYN' + 
        N' for ' + 
        @DBName_1 + --[A70_V70_V280]
        @table_name_1 --.[dbo].[UNITCHANGEMAP]
exec sp_executesql @cmd
...
SELECT * INTO A-DB
FROM DB_SYN
...
END

その後、同義語でのみ機能します。

または誰かが同じことをする方法を知っていますか?

ところで、私はSQL Server 2008を使用しているので、SQLServerのオブジェクトエクスプローラーに50個のデータベースがすべて表示されます。

4

0 に答える 0