Запустите хранимую процедуру на связанном сервере (имя связанного сервера как переменная) - PullRequest
0 голосов
/ 05 марта 2019

У меня есть сценарий, и он хорошо работает:

DECLARE @RunSPSQL VARCHAR(60);

SET @RunSPSQL = 'EXEC master.dbo.sp_test';

EXEC (@RunSPSQL) AT LNK_SERVER_NAME;

Теперь я хотел бы изменить имя связанного сервера на переменное, примерно так:

DECLARE @RunSPSQL VARCHAR(60);
DECLARE @LNK_Name NVARCHAR(60);

SET @RunSPSQL = 'EXEC master.dbo.sp_test';
SET @LNK_Name = 'LNK_SERVER_NAME';

EXEC (@RunSPSQL) AT @LNK_Name;

Но это не такt работа:

Неверный синтаксис рядом с '@ LNK_Name'

Я искал решение, но пока безуспешно.

Если кто-то,пожалуйста, помогите.

1 Ответ

2 голосов
/ 05 марта 2019

Нельзя использовать переменную для замены имени объекта. Вместо этого вам нужно использовать динамический SQL для достижения этой цели:

DECLARE @RunSPSQL varchar(60);
DECLARE @LNK_Name nvarchar(60);
DECLARE @SQL nvarchar(MAX);
SET @RunSPSQL = 'EXEC master.dbo.sp_test';
SET @LNK_Name = N'LNK_SERVER_NAME';

SET @SQL = N'EXEC (@RunSPSQL) AT ' + QUOTENAME(@LNK_Name) + N';';
EXEC sp_executesql @SQL, N'@RunSPSQL varchar(60)', @RunSPSQL = @RunSPSQL;

Просто убедитесь, что вы указали имя связанного сервера, чтобы избежать инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...