2009-11-24 74 views
0

我正在創造我認爲簡單的事情。在TSQL中,我可以創建一個UDF,其中包含一個表的行?

我想要一個用戶定義的函數,它從表中取一行作爲輸入並返回一個標量值。

喜歡的東西

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

我知道我可以在標識的UDF通過,然後從UDF中查找的數值,但好像很多額外的工作。

+2

聽起來像加入條件。根據你打算在UDF中做什麼,可能你根本不需要UDF。 –

回答

1

正如marc_s所說,在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 
+0

非常好 - 這看起來像我需要的最好的方法 –

+0

使用視圖來獲得計算列會更好 - 當有人編寫插入/更新語句時,會導致問題,不知道全名列是。 –

+0

一個視圖顯然也是一個答案,但我不同意計算列會造成混淆。 –

2

不,RDBMS沒有整個行的概念 - 只有一個字段的元組。您需要分別發送各個字段,或者發送可在UDF內部使用的ID以檢索該行所需的字段。

相關問題