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

Откуда: Москва
Сообщений: 676
Проблема в следующем:
я настраиваю представления и функции пользователя в созданной с нуля БД в SQL 2000 для получения и преобразования данных из пользовательской БД SQL 7. В последствие эти преобразованные данные передаются для процессирования ОЛАП кубов. Сложности в следующем: когда конструирую представление, оно ссылается на конкретное имя SQL сервера и конкретное имя БД ( к примеру мой домашний компьютер), потом при получении данных из пользовательской БД требуется другое имя БД, другое имя сервера. Нельзя ли создать некий абстрактный источник данных, откуда представления будут получать данные, это же источник будет использоваться и в функциях. Т.е. значащим становиться имя источника и таблицы внутри него, а имя БД, сервера настраиваются в источнике. Пока я вижу примерный способ решения этого с помощью Linked server, но при обращении к имени Linked server требуется указание имени БД внутри него, что может различаться на моем домашнем компьютере и сервере в конторе. Как упростить разработку ???
Если чего не понятно - готов пояснить.
8 мар 03, 19:01    [143172]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145721
Используйте UDL-файлы.
8 мар 03, 23:00    [143184]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Если не трудно, то подскажите:
как создать этот файл ???
как его использовать в конструировании представлений ???
как быстро оно будет работать ???
про linked server забыть или оно будет работать совместно ???
9 мар 03, 12:09    [143232]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145721
UDL - Universal Data Link

Создаете пустой файл с таким расширением. Жмете на него, выскочит стандартное окно для определения подключения. Настраиваете его. В приложении, там где свойства подключения (Conection.String), пишете "Filename=./MyUdlFile.udl". Я не знаю про разных клиентов, но в дельфях даже есть выбор, строка или файл UDL.

Если файл UDL находиться в той же директории, где и приложение, то важно явно указат путь - "./". В противном случае, будет искаться файл в директории по умолчанию, а эта директория на разных компах может быть разная. Впрочем, можно понадеятся и на умолчания и кидать файл в эти директории, но я так не рискую.
=======
В результате получается - вы ставите приложение на клиентский комп, а локальный UDL-файл настраиваете по реальным параметрам. И всем щастье.
=====
Про быстроту - скорость подключения уменьшится на время загрузки UDL-файла
Про линкед серверс ничего сказать не могу - не пробовал (нет такой нужды, изучать эту фичу), но, наверное, решение лежит в той же плоскости.
10 мар 03, 00:36    [143293]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Ну и намучался я с этим UDL файлом - так и не доперло как его создать, точнее заполнить свойствами, спасибо за разъяснения.
Последний вопрос - как обратиться из представления(вьюхи) в SQL к этому файлу для получения и преобразования данных ???
10 мар 03, 10:23    [143362]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Cat2 вас немного запутал. UDL нужен для подключения внешнего приложения к SQL серверу.
В T-SQL этот файл для подключения к внешнему источнику использовать невозможно.

То, о чем просите вы, возможно
- в динамическом запросе (но его нельзя использовать в представлении)
- при использовании openquery, если в linked server-а установлена база по-умолчанию
10 мар 03, 11:07    [143369]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Неужели так мало вариантов ???
А я могу использовать OpenDataSourse или OpenQuery и полученные из них данные преобразовать с помощью пользовательских функций текущего контекста ???
10 мар 03, 11:54    [143393]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Почитал я эту книгу - рекомендуют использовать Linked server, если обращения частые. Но остается проблема в разработке - разные имена баз данных на компьютере разработчика и компьютере, где все это будет эксплуатироваться. Подскажите, люди добрые, не дайте умереть в неведение, Glory, подскажите пожалуйста, где эту самую базу по-умолчанию указывать ???
10 мар 03, 17:19    [143525]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну сколько есть.

подскажите пожалуйста, где эту самую базу по-умолчанию указывать ???
Либо в EM при создании linked server-а с OLEDB Provider for SQL Server установить параметр Catalog.

Либо при использовании хранимой процедуры указать аналогичный параметр
EXEC sp_addlinkedserver @server='MyLinkedServer', @srvproduct='',

@provider='SQLOLEDB', @datasrc='SOMESQLSERVER', @catalog = 'somedatabase'
10 мар 03, 18:48    [143551]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
А насчет различных названий баз у разработчика и пользователя,так это надо решать на уровне инсталяции продукта, когда генерируются объекты. По-моему мнению.
10 мар 03, 18:53    [143553]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
SELECT *
FROM HN.HN_Test.dbo.sc4604
Выполнил я установку линкед сервера, указал ему какталог, вот так работает где HN_Test - имя базы, HN - имя созданного линкед сервера. Теперь если выкинуть из указанной выше конструкции HN..dbo.sc4604 выдает ошибку 7313 Invalid shema or catalog specified for provider SQLOLEDB, если указать HN.dbo.sc4604 ошибка 208 Invalid object name. Как же ее указывать, или уж придется с одинаковыми БД работать ???
10 мар 03, 20:21    [143583]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Я же говорил про openquery, а нe про явные запросы.

SELECT * FROM OPENQUERY(HN, 'select * from sc4604 ) AS a
10 мар 03, 20:25    [143585]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Если с OpenQuery, то как в полученных данных из линкед сервера уже у себя локально добавить колонку, полученную с помощью локальной функции, куда чать данных из линкед сервера передается ??? OрenQuery принимает только строку запроса....
У меня с запросами такую ошибку выдал - где ковырять ???
7405 16 Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.
10 мар 03, 22:13    [143606]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Если с OpenQuery, то как в полученных данных из линкед сервера уже у себя локально добавить колонку, полученную с помощью локальной функции, куда чать данных из линкед сервера передается ??? OрenQuery принимает только строку запроса....

Ну а в чем проблема-то ?

SELECT *, dbo.myfunc() AS xx FROM OPENQUERY(HN, 'select * from sc4604 ) AS a

Или вообще создайте view на основе запроса SELECT * FROM OPENQUERY(HN, 'select * from sc4604 ) AS a, и дальше работайте только с ним.

Или вы у вас функция на linked server-e? Ну так у вас же это SQL 7, а там нет функций.

У меня с запросами такую ошибку выдал - где ковырять ???

Ну так в сообщении же все написано
Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
CREATE .../SELECT ...
10 мар 03, 22:39    [143611]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Чую я тут уже всем надоел....
[Ну так в сообщении же все написано
Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
CREATE .../SELECT ...]
У меня эта ошибка вылазиет когда я создаю функцию в которой обращаюсь к линкед серверу. Где эти SET писать ??? В теле функции - говорит нельзя... к базе или серверу или к линкед серверу ???
11 мар 03, 09:20    [143700]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
И еще:
SELECT *, dbo.myfunc() AS xx FROM OPENQUERY(HN, 'select * from sc4604 ) AS a
это понятно, попрет, ошибся я в формулировке...
Если у меня в sc4604 очень много записей и надо эти записи ограничить по реквизиту Дата, функция, которая задает границы этого ревизита, лежит у меня локально, как мне сразу ограничения передать в Линкед сервер, чтобы не получать тучу лишних строк, а лишь то, что надо ??? Вроде:
select ... c линкед сервера
where поле таблицы на линкед сервере < ЛокальнаяФункцияКонецПериода() И
поле таблицы на линкед сервере > ЛокальнаяФункцияНачалоПериода()
или оптимизатор запросов сам поймет и с линкед сервера получит то что надо, а не все сразу ???
11 мар 03, 09:28    [143709]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
У меня эта ошибка вылазиет когда я создаю функцию в которой обращаюсь к линкед серверу.

Ё-моё, вы читать посты умеете ?
В QA или EM

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
CREATE FUNCTION dbo.myfunc ...

GO


или оптимизатор запросов сам поймет и с линкед сервера получит то что надо, а не все сразу ???

Запрос, переданный в OPENQUERY, будет выполняться на удаленном сервере. Локальный сервер будет работать с результатами этого запроса. Поэтому локальный оптимизатор никак не может влиять на работу удаленного оптимизатора. Поэтому если вы хотите, чтобы удаленный сервер возвращал меньше записей, то это условие должно быть также передано в запросе внутри OPENQUERY. К сожалению OPENQUERY не поддерживает параметров, поэтому такой запрос должне быть прописан явно, либо сформирова динамически. Это наверное вам не подходит, но вы сами "вырыли себе могилу", определив, что имена баз разработчика и пользователя могут быть разными.
11 мар 03, 11:12    [143821]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Ё-моё, вы читать посты умеете ? 

В QA или EM

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
CREATE FUNCTION dbo.myfunc ...

GO


Не злитесь, я это уже давно сделал, но оно все равно не прет, эту ошибку все также выдает...
По поводу всей этой могилы, видимо Вы правы, если имена баз будут совпадать, то все будет намного легче....
Поэтому придется мне имена сравнять...
Но все же мне не понятно: гибкость при разработке получается что отсутствует ???
11 мар 03, 11:23    [143844]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну не знаю тогда.
У меня в QA все создается при SET ANSI_NULLS ON и SET ANSI_WARNINGS ON.
А функцию у вас не была ли создана до того, как вы захотели использовать там распределенный запрос ? Если так, то удалите ее, а потом уже создавайте.


Но все же мне не понятно: гибкость при разработке получается что отсутствует ???

ИМХО
Гибкость разработки заключается в максимально эффективном использовании в проекте всех существующих возможностей выбранного сервера. Универсальность она тоже хороша до каких-то пределов. Пока она не становиться тормозом проекта.
11 мар 03, 11:55    [143878]     Ответить | Цитировать Сообщить модератору
 Re: Создание хитрого подключения в SQL 2000  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Огромное спасибо за подмогу и рязъяснения.
А по поводу функции я побрую....
11 мар 03, 12:18    [143903]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить