Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка выполнения функции 
:(
    Опции темы
uranpro
  Дата 20.11.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



добрый день!
при выполнении функции dbo.GetClassID выводит ошибку:
Код

Внутри этой функции можно вызывать только функции и расширенные хранимые процедуры.


функции:
Код

-- CLASS INSERT
ALTER procedure [dbo].[ClassInsert](@ID_ClassType int, @Val varchar(120), @ID int output)
as
begin
    SET NOCOUNT ON;
    insert T_Class (ID_ClassType, RefDesc) values (@ID_ClassType, @Val);
    set @ID = IDENT_CURRENT('T_Class');
end
-- GET CLASS ID
ALTER FUNCTION [dbo].[GetClassID](@ClassVal varchar(120), @ID_ClassType int)
RETURNS int
AS
BEGIN
    
    DECLARE @ID int;

    select @ID = ID 
    from T_Class
    where ID_ClassType = @ID_ClassType and RefDesc = @ClassVal;

    if @ID is null
    EXECUTE ClassInsert @ID_ClassType, @ClassVal, @ID output;
    
    RETURN(@ID);

END


в чем проблема ? помогите найти решение проблемы.
смотрел про расширенные ХП, их скоро уберут, так что... не знаю даже) использовать их не буду


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
uranpro
Дата 20.11.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



ЗЫ: пробовал так
Код

ALTER FUNCTION [dbo].[GetClassID](@ClassVal varchar(120), @ID_ClassType int)
RETURNS int
AS
BEGIN
    
    DECLARE @ID int;

    select @ID = ID 
    from T_Class
    where ID_ClassType = @ID_ClassType and RefDesc = @ClassVal;

    if @ID is null
    --EXECUTE ClassInsert @ID_ClassType, @ClassVal, @ID output;
    insert T_Class(ID_ClassType, RefDesc) values (@ID_ClassType, @ClassVal)
    
    RETURN(@ID);

END

Ошибка
Код

Недопустимое использование оператора с побочным действием или зависимого от времени в "INSERT" в функции.

msdn
Код

CREATE FUNCTION (Transact-SQL)
Создает пользовательскую функцию. Функция представляет собой подпрограмму Transact-SQL или среды CLR, которая возвращает значение. Пользовательская функция не может выполнять действия, изменяющие состояние базы данных. Она, как и системная функция, может быть вызвана из запроса. Скалярные функции, как и хранимые процедуры, могут быть выполнены инструкцией EXECUTE.


Это сообщение отредактировал(а) uranpro - 20.11.2009, 18:17


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Zioma
Дата 23.11.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



Ну так в функции ж нельзя вызызвать процедуру или делать insert, update, delete в базу.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0762 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.