は今、私は私のコメントで言っていた何の分を持っていたことをあなたが望むとおりにオブジェクトパスのほんの一部の同義語を作成することができないということです。しかし、リモートデータベース内の任意のオブジェクトのシノニムのドロップと作成を、簡単に動的にスクリプト化できます。ここでは、ユーザーテーブルの場合の操作方法の例を示します。他のオブジェクトの場合は、sys.tableシステムビューの代わりにsys.objectsを使用できます。
より多くの学習のためのテクニックのキーワード。動的SQL、カーソル、スキーマ・ビュー
DECLARE @ServerAndDB SYSNAME = '[10.150.10.109].[lhf]'
DECLARE @SynonymSchema SYSNAME = '[syn]'
DECLARE @ObjectPath NVARCHAR(1000)
DECLARE @SynonymName NVARCHAR(1000)
DECLARE CursorName CURSOR FOR
SELECT
@ServerAndDB + QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name) as ObjectPath
,@SynonymSchema + '.' + QUOTENAME(t.name) as SynonymName
FROM
[10.150.10.109].[lhf].sys.tables t
WHERE
t.type = 'U'
OPEN CursorName
FETCH NEXT FROM CursorName
INTO @ObjectPath, @SynonymName
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
DECLARE @SQL NVARCHAR(MAX)
IF EXISTS (SELECT * FROM sys.synonyms WHERE object_id = OBJECT_ID(@SynonymName))
BEGIN
SET @SQL = 'DROP SYNONYM ' + @SynonymName
EXECUTE sp_executesql @SQLString
SET @SQL = ''
END
SET @SQL = 'CREATE SYNONYM ' + @SynonymName + ' FOR ' + @ObjectPath
EXECUTE sp_executesql @SQLString
SET @SQL = ''
END TRY
BEGIN CATCH
--Can do error handling here
END CATCH
FETCH NEXT FROM CursorName
INTO @ObjectPath, @SynonymName
END
CLOSE CursorName
DEALLOCATE CursorName
リンクされたサーバーの名前を変更するだけです。 LinkedServerの名前は、実際のサーバー名と一致する必要はありません。 – RBarryYoung
ではなく、リンクされたサーバーでデータベース内のオブジェクトの同義語の作成を容易にスクリプト化できます。 [servername]。[dbname] .sys.objectsとdynamic sqlを使用してください。 – Matt
@Matt、あなたが意味するものを明確にしてください。 – Eliezer