У меня есть следующая созданная функция, простое объединение из двух таблиц, одной с текущего сервера, а другой с удаленного сервера:
ALTER FUNCTION [dbo].[fn_AllData] ()
RETURNS @tmp TABLE
(
Id int,
Name varchar(100)
)
AS
BEGIN
INSERT INTO @tmp
SELECT Id, Name
FROM Table1
INSERT INTO @tmp
SELECT Id, Name
FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=SERVER1;user id=xxx;password=yyy').Database1.dbo.Table1
RETURN
END
--SELECT * FROM fn_AllData()
Функция отлично работает таким образом.
Теперь мне нужно получить имя сервера динамически из другой таблицы параметров.
Это должно быть просто так:
DECLARE @SERVERNAME as varchar(20)
SELECT @SERVERNAME = Value
FROM Parameters
WHERE Name = 'SERVERNAME'
[...]
INSERT INTO @tmp
SELECT Id, Name
FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=' + @SERVERNAME + ';user id=xxx;password=yyy').Database1.dbo.Table1
Но Opendatasource
не принимает параметры.
Есть ли способ достичь моей цели, сохранив мой код в функции?