#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

