0

我有一個過程,其中我需要在含有像用的名字,姓,地址1等列的SQL表執行一些複雜的字符串操作傳遞整個行到SQL CLR功能/ SPROC

要執行此數據操縱我已經安裝各種SQL CLR C#函數,但現在我想將整行傳遞給一個CLR函數或sproc。

什麼是最好的方法來做到這一點?

我正在考慮創建一個Table Valued Paremeter,然後創建一個SQL CLR SPROC來接受數據,但數據是隻讀還是可以在C#中執行數據操作並返回一個新的數據集?

任何想法?

+0

我知道一段時間過去了,這可能不再是問題了,但我想知道你是否有機會看我的答案。謝謝。 – 2015-08-16 02:52:34

回答

0

您無法將TVP(表值參數)傳遞給SQLCLR過程或函數。它們在數據庫中定義,.NET代碼不知道它們。

如果您打算將所有字段傳遞給此函數,那麼此函數很可能是特定於此表的,那麼爲什麼不將每個字段作爲單獨的輸入參數傳遞?

你有一對夫婦對輸出選項:

  1. 如果你只有一個值返回,然後創建一個可能被用來作爲一個標量函數如下:

    UPDATE tbl 
    SET tbl.Field = MyCLRFunction(tbl.Field1, tbl.Field2, tbl.Field3, tbl.Field4) 
    FROM dbo.Table tbl 
    WHERE tbl.Field5 = SomeValue; 
    
  2. 如果需要傳回多個值(但假設仍然是單行),則創建一個可能通過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中可能會更快。