首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 SQL Server 2005 CLR 整合(三):表值函數拆分純量參數為資料列

     編輯:關於SqlServer

將純量拆解為資料列

應用程式常需傳遞多值參數(如訂單明細)。T-SQL 不支援表值參數或陣列類型,解法:將集合編碼為純量值(nvarchar 或 XML)傳遞給預存程序,程序內用表值函數 (TVF) 轉換為資料列集合再插入 LineItems 表。

CLR TVF 優勢

  • System.String 處理函數簡化編寫。
  • CLR TVF 提供高效流式實作,避免將結果載入工作表。

程式碼範例:分號分隔字串轉資料列

// TVF 將 ';' 分隔字串轉為單欄位結果集
public static ISqlReader GetStrings(SqlString str)
{
  return (ISqlReader)new MySQLReader(str);
}

public class MySQLReader : ISqlReader
{
  private string[] m_strlist;
  private int m_iRow = -1;

  public MySQLReader(SqlString str)
  {
    if (!str.IsNull)
      m_strlist = str.Value.Split(';');
  }

  public int FieldCount { get { return 1; } }

  public SqlMetaData GetSqlMetaData(int fieldNo)
  {
    if (fieldNo == 0)
      return new SqlMetaData("Value", SqlDbType.NVarChar, 60);
    else throw new NotImplementedException();
  }

  public bool Read()
  {
    if (m_strlist == null) return false;
    m_iRow++;
    if (m_iRow == m_strlist.Length) return false;
    return true;
  }
  // Column getters 略
}

核心邏輯:建構子用 String.Split 將輸入字串拆解為陣列;Read 逐列回傳直到結束。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved