2

我在存储过程中使用 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

从理论上讲,这应该可行吗?

4

2 回答 2

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,您可能会遇到性能问题,具体取决于表大小等,因为此查询不使用索引。

于 2012-06-01T21:29:47.277 回答
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 .... 

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

于 2012-05-10T10:15:30.927 回答