簡體   English   中英

SQL Server 2008是否在CLR存儲過程中接收用戶定義的表類型?

[英]SQL Server 2008 Receive an user-defined table type in a CLR Stored Procedure?

我在SQL Server 2008中具有表值參數,例如:

CREATE TYPE UserType AS TABLE
(
    UserID int,
    UserName nvarchar(100),
    UserPassword nvarchar(100)
)

我可以在我的SQL CLR存儲過程中以某種方式使用此類型嗎? 例如作為輸入參數?

[SqlProcedure]
public static void SomeFunction (/* what type should be here ?? */)
{
     //
}

我不相信你可以。 映射CLR參數數據 ”頁面指示表數據類型沒有等效項(SQL Server CLR或.NET Framework)。


或者,引用@Jani的鏈接

用戶定義的表類型不能作為表值參數傳遞給在SQL Server進程中執行的托管存儲過程或函數或從中返回

Transact-SQL表值函數實現了將該函數調用到中間表中的結果 由於它們使用中間表,因此可以在結果上支持約束和唯一索引。 當返回大結果時,這些功能將非常有用。

相反,CLR表值函數表示流替代項。 不需要在單個表中實現整個結果集 由托管函數返回的IEnumerable對象由調用表值函數的查詢的執行計划直接調用,並且結果以增量方式使用。 此流模型可確保在第一行可用后立即使用結果,而不必等待整個表被填充。 如果您返回的行數非常大,這也是一個更好的選擇,因為不必將它們作為整體存儲在內存中。 例如,可以使用托管表值函數來解析文本文件並將每一行作為一行返回。

參考

嘗試使用類而不是表值參數:

public class UserType
{
    int UserID { get; set; }
    string UserName { get; set; }
    string UserPassword { get; set; }
)

[SqlProcedure]
public static void SomeFunction (UserType type)
{
     //
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM