Как изменить эту функцию, чтобы динамически получать имя сервера opendatasource - PullRequest
0 голосов
/ 18 мая 2018

У меня есть следующая созданная функция, простое объединение из двух таблиц, одной с текущего сервера, а другой с удаленного сервера:

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 не принимает параметры.

Есть ли способ достичь моей цели, сохранив мой код в функции?

1 Ответ

0 голосов
/ 18 мая 2018

Попробуйте, надеюсь, это сработает

DECLARE @SERVERNAME as NVARCHAR(20)
DECLARE @INSERTQUERY AS NVARCHAR(255)

SELECT @SERVERNAME=Value 
FROM Parameters WHERE Name='SERVERNAME'

[...]

SET @INSERTQUERY = 'INSERT INTO @tmp
SELECT Id, Name FROM OPENDATASOURCE(''''SQLOLEDB'''', ''''Data Source=' + @SERVERNAME + ';user id=xxx;password=yyy'''').Database1.dbo.Table1'

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