SQLCLR-SqlString Max Size 8000 Limitation
2 |
我寫了一個SQLCLR的UDF(User Defined Function),對傳入的字串做了些處理再傳回:
1: [Microsoft.SqlServer.Server.SqlFunction]
2: public static SqlString DoSomething(SqlString inpString)
3: {
4: if (compString.IsNull)
5: return SqlString.Null;
6: else
7: return new SqlString(
8: MyUtilClass.Blah(inpString.ToString())
9: );
10: }
起先測試一些小字串,結果都正常,沒想到要開始玩真的,傳入一個數百K的大字串時,卻傳回了以下的錯誤訊息:
System.Data.SqlServer.TruncationException: Trying to convert return value or output parameter of size 28726 bytes to a T-SQL type with a smaller size limit of 8000 bytes.
啥? SqlString只能被限制在8000 bytes的大小? 那麼SQL 2005的NVARCHAR(MAX)是在MAX心酸的嗎?
別激動! 其實只要加個小宣告SqlFacet(MaxSize=-1),問題就可以解決囉!
1: [Microsoft.SqlServer.Server.SqlFunction]
2: [return: SqlFacet(MaxSize = -1)]
3: public static SqlString DoSomething([SqlFacet(MaxSize = -1)] SqlString inpString)
4: {
5: if (compString.IsNull)
6: return SqlString.Null;
7: else
8: return new SqlString(
9: MyUtilClass.Blah(inpString.ToString())
10: );
11: }
關於SqlFacet的說明,可以參考微軟的官方文件。
Comments
# by hulu
被打敗了 還想說會不會有 SqlText 的類別~ :p 在應付極大量的資料,T-SQL與CLR的UDF效能比真的差得多~~
# by Jasper
不好意思,請問那一個效能較佳...