OPENQUERY字符串中的存储过程/ SQL变量

时间:2012-05-10 10:06:48

标签: sql-server-2005 stored-procedures openquery

我在存储过程中使用OPENQUERY(从链接服务器获取数据)时遇到问题。我一直在阅读SQL变量,但似乎无法使它工作,所以也许我误解了SQL中的变量/字符串。它抛出错误“'+'附近的语法不正确。”而且我不确定我做错了什么。

代码:

ALTER PROCEDURE [dbo].[sp_getPerson]
@myName nvarchar(MAX)
AS
BEGIN
SET NOCOUNT ON;

SELECT     *
    FROM         OPENQUERY(MY_LINKED_SERVER, 'SELECT * FROM myTable
WHERE (myName= ''' + @myName + ''')
') AS derivedtbl_1

END

理论上这应该有效吗?

2 个答案:

答案 0 :(得分:1)

我将整个查询放入变量并执行变量。

declare @myName nvarchar(MAX)
declare @sqltext varchar(max)


select  @myName = 'Some Name'

select @sqltext='
select * from openquery(MY_LINKED_SERVER,''select * from database.schema.table
where myName = '''+@myName +'''
)'


exec (@sqltext)

如果使用LINKED_SERVER.DATABASE.SCHEMA.TABLE,则可能会出现性能问题,具体取决于表大小等,因为此查询不使用索引。

答案 1 :(得分:0)

您所要做的就是通过脚本添加链接服务器

http://msdn.microsoft.com/en-us/library/ms189811.aspx sp_addlinkedsrvlogin

如果您的链接服务器是TEST-SQL且数据库是test01且表名是testtb

和....

从另一台服务器查询它是这样的。

select * from [TEST-SQL].test01.dbo.testtb linktedTB where .... 

您还可以将表连接到链接服务器。