Получение в функции данных из другой базы

bond
Дата: 21.01.2009 15:07:29
SQL Server 2005

Создана пользовательская функция (table-valued) и сохранена в базе master.
В этой функции происходит выборка данных из таблицы. Путь к таблице не содержит название базы, где эта таблица находиться, т.е.
select * from [dbo].[MyTable]

Функцию вызываю следующим образом:
use [MyDatabase]
select * from [master].[dbo].[MyFunction](...)

Функция завершается с ошибкой, по причине того что не найдена таблица [dbo].[MyTable].
Я так понимаю, что функция выполняется не в контексте базы [MyDatabase], а в базе [master] и поэтому естественно не видит таблицу [MyTable].

Вызвать функцию без указания [master].[dbo] то же не получается, говорит, что нету такой в текущей базе.

Т.е. надо в функции получить данные из таблицы в другой базе без указания полного пути к ней. Как эту проблему можно решить?

Спасибо
-=DiM@n=-
Дата: 21.01.2009 15:09:33
Через процедуру и динамический SQL
bond
Дата: 21.01.2009 15:15:14
Через процедуру, к сожалению не получилось. В функции используются Extended Stored Procedures оформленные в виде внешней DLL. Их вызов в процедуре к ничему хорошему не приводит, а вот в теле функции они нормально функционирую. Не знаю в чем причина, но вот такая их особенность.
Glory
Дата: 21.01.2009 15:19:28
bond
Их вызов в процедуре к ничему хорошему не приводит

Это такое сообщение об ошибке вы получаете ?
bond
Дата: 21.01.2009 15:34:32
Ошибка вот такая.

(1 row(s) affected)

(1 row(s) affected)
GetValue() failed : Record : 1
Msg 20001, Level 1, State 1

(1 row(s) affected)
UnregisterValue() succeeded :91
Msg 1, Level 1, State 1
Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.

Вижу, что GetValue() завершилось с ошибкой, но причина не ясна (функция реализована во внешней DLL). Но главное, что точно такой же код в функции выполняется нормально, по крайней мере, вижу результат работы.
Glory
Дата: 21.01.2009 16:12:12
bond

Вижу, что GetValue() завершилось с ошибкой, но причина не ясна (функция реализована во внешней DLL). Но главное, что точно такой же код в функции выполняется нормально, по крайней мере, вижу результат работы.

Вы уверены, что это ваша DLL, а не системная ?
Потому что ошибка 20001 - это системная ошибка There is no nickname for article '%s' in publication '%s'.
bond
Дата: 21.01.2009 16:53:48
Ну DLL файл точно не от Микрософта, поскольку при обычной инсталляции сервера он не появляется. Есть другая программа, которая использует SQL сервер для хранения своих данных и добавляет свои процедуры, реализованные в виде DLL.