T-Sql中的动态openrowset功能还是可行的替代方案?

时间:2012-04-10 21:04:48

标签: sql sql-server sql-server-2008 tsql sql-server-2005

我不太清楚怎么说这个。这是问题所在:

我有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来获取外部数据。

我没有与tvfcross apply结婚,但我确实需要一种快速获取此数据的方法。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您应该使用OPENQUERY并直接过滤远程服务器上提供的查询。这样您就可以确保在其他服务器上进行过滤。在控制器上,您可以从远程服务器获取所有数据并在本地过滤它们,这解释了为什么执行速度太慢。所以,你的第二种方法,但使用OPENQUERY是理想的解决方案。

您需要创建一个链接服务器。

您必须考虑到查询语法是远程服务器的语法,而不是T-SQL。

OPENQUERY