我的SQL Server数据库中有多个链接服务器。 我创建了一个识别主要主机的程序
EXEC [Schema].[Server]
此过程返回一个表' ServerTable'只有一行
------------------
| - | Server
------------------
| 1 | server_name
------------------
现在我想使用OPENQUERY创建一个视图,并在' ServerTable'
中创建一个项目USE [Database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [Schema].[View] AS
SELECT
*
FROM OPENQUERY (
server_name, <-- variable to be updated depending on 'ServerTable' item
'SELECT *
FROM "_SYS_BIC"."system-local.bw.bw2hana/WHC_CP03"'
)
;
GO
答案 0 :(得分:1)
您无法参数化OPENQUERY调用,因此您已使用动态SQL
DECLARE @sql nvarchar(4000)
SET @sql = 'SELECT
*
FROM OPENQUERY (
' + server_name + '
', ''SELECT *
FROM "_SYS_BIC"."system-local.bw.bw2hana/WHC_CP03"''
)'
EXEC (@sql)
答案 1 :(得分:1)
假设它总是只返回一个值,你可以使用OUTPUT。
像...一样的东西。
create procedure [Schema].[Server]
@someParameter theDataType,
@outPutParameter varchar(64) output
as
begin
select @outPutParameter = someColumn
from sys.servers
where someColumn = @someParameter
and isLinkedServer = 1
end
或者,如果您返回多行,则可以将其存储在表格中
create table #temp([Server] char(64))
insert into #temp
exec [Schema].[Server]
declare @server char(64) = (select top 1 [Server] from #temp)
然后,只需在openquery中使用@server和动态sql