我正在創造我認爲簡單的事情。在TSQL中,我可以創建一個UDF,其中包含一個表的行?
我想要一個用戶定義的函數,它從表中取一行作爲輸入並返回一個標量值。
喜歡的東西
select
mt.Id,
MyUDF(mt)
from M
MyTable mt
where mt.Price > 0
我知道我可以在標識的UDF通過,然後從UDF中查找的數值,但好像很多額外的工作。
我正在創造我認爲簡單的事情。在TSQL中,我可以創建一個UDF,其中包含一個表的行?
我想要一個用戶定義的函數,它從表中取一行作爲輸入並返回一個標量值。
喜歡的東西
select
mt.Id,
MyUDF(mt)
from M
MyTable mt
where mt.Price > 0
我知道我可以在標識的UDF通過,然後從UDF中查找的數值,但好像很多額外的工作。
正如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
非常好 - 這看起來像我需要的最好的方法 –
使用視圖來獲得計算列會更好 - 當有人編寫插入/更新語句時,會導致問題,不知道全名列是。 –
一個視圖顯然也是一個答案,但我不同意計算列會造成混淆。 –
不,RDBMS沒有整個行的概念 - 只有一個字段的元組。您需要分別發送各個字段,或者發送可在UDF內部使用的ID以檢索該行所需的字段。
聽起來像加入條件。根據你打算在UDF中做什麼,可能你根本不需要UDF。 –