Официальный сайт студ.городка НГТУ
Программирование и БД » [SQL SERVER 2005] need help! 

#1  19.02.08 22:06

[SQL SERVER 2005] need help!

Скалярная функция следующего вида:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author:        <MONITOR>
-- Create date: <...>
-- Description:    <Adding Lesson to dbo.times table>
-- =============================================
ALTER FUNCTION [dbo].[AddLesson](@BreakLength tinyint)
RETURNS tinyint
AS
BEGIN
    DECLARE @i tinyint;
    DECLARE @h tinyint;
    DECLARE @m tinyint;
    SET @h = 8;
    SET @m = 45;
    SET @i = 0;
    SET @i = (SELECT MAX(id) FROM dbo.times);
    IF (@i > 0)
    BEGIN
        SET @h = (SELECT hour FROM dbo.times WHERE id = @i);
        SET @m = (SELECT minute FROM dbo.times WHERE id = @i);
        SET @m = @m + @BreakLength;
        IF (@m > 60)
        BEGIN
            SET @m = @m - 60;
            SET @h = @h + 1;
        END;
    END;
    INSERT INTO TimeTable.dbo.times (hour, minute) VALUES (@h, @m);
    RETURN 0;
END

при исполнении выдаёт такую ошибку:

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

Нуждаюсь в объяснении - чего не хватает SQL SERVER для хорошей жизни? (то есть чего ему не понравилось в команде INSERT?)

Заранее спасибо за помощь

Offline

#2  20.02.08 14:31

Re: [SQL SERVER 2005] need help!

Не работала с 2005 сервером, но думаю, что здесь ситуация такая же как и в 2000-ом.
А в 2000-ом разрешено в функциях использовать апдейт, инсерт и делит применительно только к табличным переменным, а не к таблицам.
Из хелпы по 2000 серверу:

The types of statements that are valid in a function include:
...
-UPDATE, INSERT, and DELETE statements modifying table variables that are local to the function.

Кроме того, в функциях, определенных пользователем,  запрещено использовать недетерменированные фкнкции (напрмер getdate() )

Offline

Программирование и БД » [SQL SERVER 2005] need help! 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.024 сек.
Выполнено 11 запросов.