2012-05-10 3 views
2

У меня возникли проблемы с использованием OPENQUERY (для получения данных со связанного сервера) в хранимой процедуре. Я читал о переменных SQL, но не могу заставить его работать, поэтому, возможно, я неправильно понимаю переменные/строки в SQL. Это вызывает ошибку «Неправильный синтаксис рядом с« + ».» и я не уверен, что я делаю неправильно.Сохраненная процедура/переменная SQL внутри строки OPENQUERY

Код:

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 

В случае, если эта работа, в теории?

ответ

0

все, что вам нужно сделать, это добавить связанный сервер через скрипт

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

если ваш привязанный сервер ТЕСТ-SQL и базы данных test01 и имя таблицы testtb

и ....

запрос с другого сервера - вот что.

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

и вы также можете присоединить таблицы к связанному серверу.

+0

Отлично! Я просто не уверен в синтаксисе - нужна ли в связанной таблице полный префикс? E.g. SELECT * FROM [LINKED_SERVER] .MYDATABASE.dbo.MYTABLE1 LEFT OUTER JOIN [LINKED_SERVER] .MYDATABASE.dbo.MYTABLE2 ON ... – valoukh

+0

exec sp_addlinkedserver @ server = 'test-sql01'; exec sp_addlinkedsrvlogin @ rmtsrvname = 'test-sql01', @ useself = false, @ rmtuser = 'sa', @ rmtpassword = 'sapassword'; yup ему нужен весь префикс .. но вы можете псевдонимом linkedserver-table, как указано выше. – maSTAShuFu

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 = '''[email protected] +''' 
)' 


exec (@sqltext) 

Если вы используете LINKED_SERVER.DATABASE.SCHEMA.TABLE, вы можете иметь проблемы с производительностью в зависимости от размера таблицы и т.д., потому что никакие индексы не используются с этим запросом.

Смежные вопросы