需要更新返回的功能

时间:2018-02-13 17:48:57

标签: sql sql-server function

我试图创建一个函数,根据它的bookType更新返回值。借书时应触发此功能。

https://i.stack.imgur.com/u8ttY.png

https://i.stack.imgur.com/YlsrC.png

这就是我现在所拥有的。

CREATE FUNCTION dbo.ufn_BReturn_date(@Book_ID int)

RETURNS DATE 
AS
BEGIN
DECLARE @Return_date DATE;
DECLARE @bookType INT;
SELECT @BookType = b.BookType
FROM Book b
WHERE b.Book_ID = @Book_ID; 
    IF (@BookType = 1)
    SET @Return_date = DATEADD(MONTH, 2, cast(CURRENT_TIMESTAMP as date))
    ELSE IF (@BookType = 2)
    SET @Return_date = DATEADD(MONTH, 3, cast(CURRENT_TIMESTAMP as date))
    ELSE
    SET @Return_date = cast(CURRENT_TIMESTAMP as date)
    RETURN @Return_date
END;

2 个答案:

答案 0 :(得分:0)

你做不到。 SQL Server中的FUNCTION严格限制为只读操作,因此您甚至无法EXEC来自函数(third-party hacks notwithstanding)的sproc。

你想要的是TRIGGER ON UPDATE

答案 1 :(得分:0)

如果您需要更新现有行中的值,请执行以下操作:

update Book
set Return_date =
    dateadd(month, case BookType when 1 then 2 when 2 then 3 else 0 end, current_timestamp)
where Return_date is null; -- ??

您当然可以在Loan表格或适当的地方的触发器中添加类似的更新。