您無法將TVP(表值參數)傳遞給SQLCLR過程或函數。它們在數據庫中定義,.NET代碼不知道它們。
如果您打算將所有字段傳遞給此函數,那麼此函數很可能是特定於此表的,那麼爲什麼不將每個字段作爲單獨的輸入參數傳遞?
你有一對夫婦對輸出選項:
如果你只有一個值返回,然後創建一個可能被用來作爲一個標量函數如下:
UPDATE tbl
SET tbl.Field = MyCLRFunction(tbl.Field1, tbl.Field2, tbl.Field3, tbl.Field4)
FROM dbo.Table tbl
WHERE tbl.Field5 = SomeValue;
如果需要傳回多個值(但假設仍然是單行),則創建一個可能通過CROSS APPLY使用的表值函數,如下所示:
UPDATE tbl
SET tbl.Field6 = fnc.FieldA,
tbl.Field7 = fnc.FieldB,
tbl.Field8 = fnc.FieldC,
FROM dbo.Table tbl
CROSS APPLY MyCLRFunction(tbl.Field1, tbl.Field2, tbl.Field3, tbl.Field4) fnc
WHERE tbl.Field5 = SomeValue;
從技術上講,這不需要SQLCLR超過常規的T-SQL函數,但取決於正在執行的操作,它在SQLCLR中可能會更快。
我知道一段時間過去了,這可能不再是問題了,但我想知道你是否有機會看我的答案。謝謝。 – 2015-08-16 02:52:34