SQL 创建UDF计算列

3

我尝试创建一个计算列,但由于其中一列在另一个表中,我了解到需要创建一个UDF。这是ERD的链接,以便您可以查看关系。

http://imageshack.us/photo/my-images/23/databaseassignment2new.png/

这就是我试图做的。

CheckOutDate + loanperiod = lastreturndate
So the result would look something like this

Checkoutdate    loanperiod      lastreturndate

2012-1-01          3         2012-4-01

这是我目前为止的成果

  CREATE FUNCTION dbo.Getvaludates( @laastreturndate DATETIME)
  RETURNS DATETIME
  AS
 BEGIN
  DECLARE @lastReturndate DATETIME

  SELECT @lastReturndate= dateadd(month,loanperiod,CheckOutDate)
  FROM [Loan] I
    JOIN [Item] L ON I.barcode = L.barcode
    JOIN [Return] R ON I.barcode = R.barcode
   WHERE I.barcode = @lastreturndate
   RETURN @lastReturndate
   END 
   GO

然后我需要将此添加到计算列中。

   ALTER TABLE dbo.Item
   ADD lastreturndate AS dbo.Getvaluedate(lastreturndate)       

1
嗨,Sebastian,尝试将条形码传递给你的UDF,而不是lastreturndate。你想要返回lastreturndate,而不是传递它。然后也更新你的WHERE语句。看看这是否有效。祝你好运。 - sgeddes
@sgeddes 我是否还需要在 ADD lastreturndate AS dbo.Getvaluedate(这里) 中传递条形码? - Dynamiite
顺便问一下,你的贷款期限字段存储在哪里?在你的表定义中没有看到它。 - sgeddes
@sgeddes 在 Item_Details。 - Dynamiite
1个回答

3
我认为您的UDF应该是这样的:

我认为您的UDF应该是这样的:

CREATE FUNCTION dbo.Getvaluedate( @barcode int)
  RETURNS DATETIME
  AS
 BEGIN
  DECLARE @lastReturndate DATETIME

  SELECT @lastReturndate= dateadd(month,loanperiod,CheckOutDate)
  FROM [Loan] I
    JOIN [Item] L ON I.barcode = L.barcode
    JOIN [ItemDetails] ID ON L.isbn = ID.isbn
   WHERE I.barcode = @barcode

   RETURN @lastReturndate
   END ;

然后:

ALTER TABLE Loan ADD lastreturndate  AS dbo.Getvaluedate(barcode);

And here is a SQL Fiddle Demo


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接