Это динамическая c хранимая процедура, которая передает базу данных, связанный сервер и состояние. При выполнении этой хранимой процедуры она запускает хранимую процедуру в базе данных на связанном сервере и возвращает результаты.
Рабочий код - здесь связанный сервер является абсолютным и не передается как переменная
EXECUTE MYPROC 'CA','MYDB'
CREATE PROCEDURE [dbo].[MYPROC]
(
@state varchar(2),
@DATABASE char(20)
)
AS
DECLARE @SQL @VARCHAR(MAX)
SELECT @SQL = 'use ' + @DATABASE + ';
SELECT * FROM pubs.dbo.authors WHERE state = @state'
EXEC MYLINKSERVER.master.dbo.sp_executesql
@SQL, N'@state char(2)', @state
Не рабочий код: здесь связанный сервер передается через переменную.
Я получаю «Синтаксическую ошибку» на @LINKEDSERVER**.**master
EXECUTE MYPROC 'CA','MYDB','MYLINKSERVER'
CREATE PROCEDURE [dbo].[MYPROC]
(
@state varchar(2),
@DATABASE char(20),
@LINKEDSERVER VARCHAR(20)
)
AS
DECLARE @SQL @VARCHAR(MAX)
SELECT @SQL = 'use ' + @DATABASE + ';
SELECT * FROM pubs.dbo.authors WHERE state = @state'
EXEC @LINKEDSERVER.master.dbo.sp_executesql
@SQL, N'@state char(2)', @state
Заранее спасибо