Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Курсор к remote table с index  [new]
UncleFox
Member

Откуда:
Сообщений: 56
Добрый день.
Каким образом можно положить в курсор данные если он:
1. содержит таблицу из линкованной ДБ
2. содержит индекс при запросе из неё
Например:
DECLARE @test_return varchar(100)

--1. Даёт ошибку "Cannot specify an index hint for a remote data source."
--DECLARE test_cursor CURSOR FOR (SELECT ContractID FROM [SERVER1].[DB].[dbo].[Contract] with (NOLOCK INDEX = PKContract) WHERE ContractID=1)

--2. "Даёт ошибку A cursor with the name 'test_cursor' does not exist."
EXEC ('DECLARE test_cursor CURSOR FOR (SELECT ContractID FROM [DB].[dbo].[Contract] with (NOLOCK INDEX = PKContract) WHERE ContractID=1)') AT SERVER1;

OPEN test_cursor FETCH NEXT FROM test_cursor INTO @test_return

Если можно на примере.
27 май 16, 10:07    [19226639]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
UncleFox
Member

Откуда:
Сообщений: 56
--3. Даёт ошибку "Cannot specify an index hint for a remote data source."
exec sp_executesql N'Declare test_cursor CURSOR FOR SELECT ContractID FROM [SERVER1].[DB].[dbo].[Contract] with (NOLOCK INDEX = PKContract) WHERE ContractID=1'
27 май 16, 10:23    [19226735]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
а что за сервер? версия?
27 май 16, 10:25    [19226748]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
UncleFox
Member

Откуда:
Сообщений: 56
TaPaK,
Microsoft SQL Server 2012 - 11.0.5343.0 (X64)
27 май 16, 10:29    [19226779]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
UncleFox,

говорят нельзя хинтовать индексы для линкед. Выход - создать нужную вьюху с хинтами на источнике и дёргать её
27 май 16, 10:38    [19226830]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
UncleFox,
https://www.sql.ru/forum/206411/zapros-na-drugoy-server (см. последнее сообщение)
27 май 16, 10:40    [19226840]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
UncleFox
Member

Откуда:
Сообщений: 56
TaPaK,

То что он говорит, я прочитал. Про view понятно.
Неужели нельзя делать такие курсоры? MS где-то это ограничиает? об этом где-то написано?
27 май 16, 10:41    [19226851]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
sergeimv,

да можно и так

автор
Declare test_cursor CURSOR LOCAL STATIC FOR SELECT Id FROM OPENQUERY([SERVER], 'SELECT ID FROM [DB].[dbo].[TABLE] WITH (INDEX(0)) WHERE Id=0')
27 май 16, 10:45    [19226874]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
UncleFox
Неужели нельзя делать такие курсоры?
Можно.
DECLARE test_cursor CURSOR FOR SELECT ContractID FROM openquery([SERVER1], 'select ContactID from [DB].[dbo].[Contract] with (NOLOCK INDEX = PKContract) WHERE ContractID=1')


А что без курсора совсем никак?
27 май 16, 10:51    [19226917]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
UncleFox,

linked сервер - это не у Вас в правом кармане, это в соседней области в глухой деревне без дорог. Так что делайте выводы об эффективности таких решений.
27 май 16, 11:18    [19227048]     Ответить | Цитировать Сообщить модератору
 Re: Курсор к remote table с index  [new]
UncleFox
Member

Откуда:
Сообщений: 56
Про эффективность понимаю.
Openquery помог, спасибо всем!
27 май 16, 13:59    [19227927]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить