代码之家  ›  专栏  ›  技术社区  ›  Scott Weinstein

在TSQL中,我可以创建一个以表的行作为输入的UDF吗?

  •  0
  • Scott Weinstein  · 技术社区  · 15 年前

    我想要一个用户定义的函数,它将表中的一行作为输入并返回标量值。

    select 
        mt.Id,
        MyUDF(mt)
    from M
        MyTable mt
    where mt.Price > 0
    

    我知道我可以将Id传递给UDF,然后从UDF中查找值,但这似乎需要很多额外的工作。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Adam Robinson    15 年前

    正如marc_所说,T-SQL中不存在将“行”作为对象发送的想法。可以将行中的数据作为单个值发送,但不能发送行本身。

    A. computed column

    例如,假设我有这个表:

    Customer:
        CustomerID
        FirstName
        LastName
        ...
    

    如果我想要一个计算列 FullName ,我的表声明如下所示:

    create table Customer
    (
        CustomerID int identity(1, 1) primary key,
        FirstName varchar(100),
        LastName varchar(100),
        FullName as LastName + ', ' + FirstName
    )
    

    ALTER

    alter table Customer add FullName as LastName + ', ' + FirstName
    
        2
  •  2
  •   marc_s dmck    15 年前

    不,RDBMS没有行作为一个整体的概念——只有字段的元组。您需要单独发送各个字段,或者发送一个ID,该ID可在UDF中用于从该行检索所需的字段。