我不太清楚怎么说这个。这是问题所在:
我有1-n项需要加入到不同的系统(AS400)以获取一些数据。
如果我在openrowset
之外指定where
条件,则openrowset
将永远存在,例如:
select * from openrowset('my connection string', 'select code, myfield from myTable')
where code = @code
我的想法是创建一个函数,该函数接收项目编号并使用动态sql将其注入openrowset
字符串,la:
declare @cmd varchar(1000)
set @cmd = 'select * from openrowset('my connection string',
''select code, myfield from myTable where code = ' + @code + ''')'
显然我不能在函数内部使用insert.. exec..
策略。有没有更好的方法来实现这一目标?我打算在连接中使用它,我需要使用cross apply
来获取外部数据。
我没有与tvf
和cross apply
结婚,但我确实需要一种快速获取此数据的方法。谢谢你的帮助。
答案 0 :(得分:1)
您应该使用OPENQUERY并直接过滤远程服务器上提供的查询。这样您就可以确保在其他服务器上进行过滤。在控制器上,您可以从远程服务器获取所有数据并在本地过滤它们,这解释了为什么执行速度太慢。所以,你的第二种方法,但使用OPENQUERY是理想的解决方案。
您需要创建一个链接服务器。
您必须考虑到查询语法是远程服务器的语法,而不是T-SQL。