Теперь, когда у меня была минута, что я говорил в своем комментарии, что вы не можете создать синоним только часть пути объекта, как вы хотите. Но вы можете легко с легкостью списать падение и создание синонимов для любого объекта в вашей удаленной базе данных. вот пример того, как это сделать, если для пользовательских таблиц. Для других объектов вы можете использовать sys.object вместо системного представления sys.table.
Техника ключевые слова для более обучения. Динамический 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 does * not * должно соответствовать фактическому имени сервера. – RBarryYoung
нет, но вы можете легко создать сценарий создания синонимов объектов в своей базе данных на вашем связанном сервере. просто используйте [имя_сервера]. [dbname] .sys.objects и dynamic sql для этого – Matt
@Matt, не могли бы вы прояснить, что вы имели в виду? – Eliezer