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

Откуда: Мурманск
Сообщений: 1418
Попробовал сделать простенькую пользовательскую фунцию для обработки справочников, куда в качестве параметра должно передаватся имя таблицы и понятие. Если понятие я еще могу обработать, то как обработать имя таблицы?
Вот что у меня сейчас получилось, но и это не работает. А как это надо делать нормально?

CREATE FUNCTION DBO.GetRefIndex(@RefName varchar(50), @RefValue varchar(100))
RETURNS int
AS
BEGIN
Declare @SQL varchar(200)
Set @SQL = 'Select ID From ' + @RefName + ' Where Name = ''' + @RefValue + ''''
Exec @SQL
RETURN 1
END
2 июл 05, 20:32    [1669924]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Glory
Member

Откуда:
Сообщений: 104760
А как это надо делать нормально?
Никак. Динамические запросы внутри UDF-ов запрещены. Об этом написано в BOL. Да и сообщение об ошибке об этом говорит

ЗЫ
Динамический запрос вызывается так Exec(@SQL). Это тоже написано в BOL
2 июл 05, 20:35    [1669926]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
автор
Динамический запрос вызывается так Exec(@SQL). Это тоже написано в BOL

Ах если-бы!! У меня все прекрасно работает в Query analyzer А вот не срабатывает это в фукнции.
Там и просто Execute('Select '+ 'ля'+'ля'+'ля') работает а вот что тут сделать ума не приложу.
2 июл 05, 20:57    [1669943]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
itON
Member

Откуда: Москва
Сообщений: 391
2Страдалецъ
У вас много таблиц имеют поле ID и поле Name?
Сомнительна ее полезность, имхо.
2 июл 05, 21:07    [1669953]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Glory
Member

Откуда:
Сообщений: 104760
А вот не срабатывает это в фукнции
Читайте ответы, которые вам дают.
2 июл 05, 21:08    [1669955]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
itON
2Страдалецъ
У вас много таблиц имеют поле ID и поле Name?
Сомнительна ее полезность, имхо


Очень много, я же написал, что это справочники, и самое грусное что если-бы это получилось у меня-бы не болела голова с добавлением нового значения в любой справочник. Все было-бы реализовано в одной функции.
2 июл 05, 21:32    [1669971]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Страдалецъ
itON
2Страдалецъ
У вас много таблиц имеют поле ID и поле Name?
Сомнительна ее полезность, имхо


Очень много, я же написал, что это справочники, и самое грусное что если-бы это получилось у меня-бы не болела голова с добавлением нового значения в любой справочник. Все было-бы реализовано в одной функции.

Ну и меняйте функцию на процедуру.
2 июл 05, 21:34    [1669972]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
Glory Ответ никак меня не устраивает. Если нельзя в лоб, то существует наверняка другой путь, только какой?
Я попробую сформулировать еще раз задачу, может тогда и решение подскажете.
1. Есть куча справочников вида
ID - Уникальный код
Name - Понятие
Для всех этих справочников действует правило, что при добавлении нового понятия необходимо проверить его на наличие, если уже есть то вернуть его ID, в случае отсутствия оного занести новое понятие в справочник и опять-же вернуть его ID.

Обычно я пишу функцию которая это делает и вопросов не возникает, но вот теперь я делаю базу в MSSQL и хочу воспользоваться его возможностями.
2 июл 05, 21:41    [1669982]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Glory Ответ никак меня не устраивает. Если нельзя в лоб, то существует наверняка другой путь, только какой?
Не существует НИКАКОГО способа выполнить внутри UDF динамический запрос.
Ни прямого, ни кривого.
2 июл 05, 21:44    [1669985]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Страдалецъ
Glory Ответ никак меня не устраивает. Если нельзя в лоб, то существует наверняка другой путь, только какой?
Я попробую сформулировать еще раз задачу, может тогда и решение подскажете.
1. Есть куча справочников вида
ID - Уникальный код
Name - Понятие
Для всех этих справочников действует правило, что при добавлении нового понятия необходимо проверить его на наличие, если уже есть то вернуть его ID, в случае отсутствия оного занести новое понятие в справочник и опять-же вернуть его ID.

Обычно я пишу функцию которая это делает и вопросов не возникает, но вот теперь я делаю базу в MSSQL и хочу воспользоваться его возможностями.

Ну и как до Вас донести, что нельзя?
P.S. https://www.sql.ru/forum/actualthread.aspx?tid=196919#1669972
2 июл 05, 21:44    [1669986]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
Гавриленко Сергей Алексеевич
Ну и меняйте функцию на процедуру

А что есть разница? Тогда поясните если не трудно.
У меня руководства почти никакого нет, привык по пословице "если ничего не помогает читайте руководство". Пока вы помогаете, а руководства хорошего у меня нет.
2 июл 05, 21:45    [1669989]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
А что есть разница? Тогда поясните если не трудно.

Разница в том, что в процедуре exec юзать можно, а в функции - нет.
автор
Пока вы помогаете, а руководства хорошего у меня нет.

BOL - неплохое руководство. Все говорят.
2 июл 05, 21:50    [1669999]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
BusyMan
Member

Откуда: Москва
Сообщений: 4927
Гавриленко Сергей Алексеевич
автор
Пока вы помогаете, а руководства хорошего у меня нет.

BOL - неплохое руководство. Все говорят.
Я и то подтверждаю MSDN отдыхает...
2 июл 05, 21:58    [1670008]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
Хороще-то хорошее, но к сожалению у меня в конторе интернет еще роскошь.
2 июл 05, 22:00    [1670011]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Страдалецъ
Хороще-то хорошее, но к сожалению у меня в конторе интернет еще роскошь.

Т.е. сервер у Вас стоит, а BOL'а нету ???
2 июл 05, 22:01    [1670012]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
точно :-)
2 июл 05, 22:10    [1670020]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Страдалецъ
точно :-)

Ну так возьмите инсталяционный диск и доставьте BOL. Хотите на сервер, а хотите на свою раб.станцию
2 июл 05, 22:15    [1670027]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
Слушайте, а что там за SQLServer2K5_BOL.msi аж в 116 мб ? Это что документация по 2005 серваку. Нифига себе документация.
2 июл 05, 22:16    [1670029]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Где там ?
2 июл 05, 22:18    [1670032]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
http://www.microsoft.com/downloads/thankyou.aspx?familyId=F0D182C1-C3AA-4CAC-B45C-BD15D9B072B7&displayLang=en
2 июл 05, 22:19    [1670037]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну в заголовке сказано

SQL Server 2005 CTP June 2005: Books Online

Только у вас ведь вроде бы не эта версия ?
2 июл 05, 22:23    [1670041]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская функция с и имя таблицы как параметр.  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1418
Нет у меня SQL SERVER 2000. Ну ладно, наверное можно закрыть эту тему. Уже понятно, что надо сие организовывать в хранимых процедурах. И искать мне путевую литературу. Спасибо Всем за помощь.
2 июл 05, 22:27    [1670047]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить