我创建了下一个函数,一个来自两个表的简单联合,一个来自当前服务器,另一个来自远程服务器:
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
不接受参数。
有没有办法实现我的目标,将我的代码保存在函数中?
答案 0 :(得分:0)
尝试这个,我希望这有效
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)