簡體   English   中英

SQLCLR存儲過程數據類型

[英]SQLCLR Stored procedure datatypes

由於它的復雜性,我決定創建一個SQLCLR存儲過程來替換SQL Server存儲過程。

問題:編寫CLR存儲過程時,是否有任何數據類型或API限制? 如果是這樣,有人可以給我任何建議。

我打算使用var, List<T>, DataTable, DataRow[]Queue以及一些LINQ擴展方法。

實際上,這是一個相當開放的問題,因為.NET / CLR代碼本身可以做什么以及可以/應該將哪些數據類型用作輸入/輸出參數都存在細微差別。

從基礎開始,細微差別取決於您所使用的SQL Server版本以及所詢問的特定問題。

.NET Framework版本

  • 不允許使用混合模式: SQL Server CLR主機內只能使用一個CLR版本,並且CLR版本取決於SQL Server的版本,不能更改
  • SQL Server 2005、2008和2008 R2:靜態綁定到CLR 2.0
  • SQL Server 2012、2014和2016:靜態綁定到CLR 4.0

.NET Framework庫和數據類型映射

SQL Server 2005

支持的.NET Framework庫

  • CustomMarshalers
  • Microsoft.VisualBasic程序
  • Microsoft.VisualC
  • mscorlib程序
  • 系統
  • 系統配置
  • System.Data
  • System.Data.OracleClient的
  • System.Data.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions的
  • System.Web.Services
  • 的System.Xml

資料類型:

SQL Server 2008、2008 R2、2012、2014和2016:

支持的.NET Framework庫 :( 添加了兩個庫,如下所述

  • CustomMarshalers
  • Microsoft.VisualBasic程序
  • Microsoft.VisualC
  • mscorlib程序
  • 系統
  • 系統配置
  • System.Data
  • System.Data.OracleClient的
  • System.Data.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions的
  • System.Web.Services
  • 的System.Xml
  • System.Core.dll( 在SQL Server 2008中添加
  • System.Xml.Linq.dll( 在SQL Server 2008中添加

資料類型:

雜項。

  • 關於數據類型:如果有可用的Sql*類型(例如SqlInt32 ),則使用它;否則,使用它。 不要在C#方法中使用.NET類型作為輸入參數(例如intInt32 )。 僅當沒有Sql*類型映射到SQL Server數據類型時,才使用本機.NET類型。 此異常的兩個常見實例是使用object (可以是DbNull.Value )映射到SQL_VARIANT ,以及DateTime / DateTime? 哪個映射到DATETIME2
  • 您可以參考/使用第三方組件以及框架庫上面列出的那些之外,但你需要用它們導入PERMISSION_SETUNSAFE進入你的代碼還駐留的數據庫。 您可能還需要將數據庫設置為TRUSTWORTHY ON ,以便將它們設置為UNSAFE因為從Microsoft提供的DLL中似乎不可能(無論如何,我也找不到)。
  • 一般來說,任何針對.NET 2.0編寫的,使其可以在SQL Server 2005中使用的東西都應在任何更高版本的SQL Server中都可以使用。 我還沒有遇到在2005年的.NET 2.0中可以使用的功能,但是在2005年以后的任何版本中都無法使用。
  • 您不能將表值參數(TVP)傳遞到基於SQLCLR的對象(存儲過程,函數等)中。 有關CLR存儲過程的MSDN文檔中指出了這一點以及其他一些有用的信息。
  • 使用List<T>DataTableDataRow[]時,我沒有看到任何問題。
  • 我沒有使用Queuevar但是使用它們時不會出現任何問題。
  • 自從我嘗試LINQ已經有好幾年了,但似乎回想起唯一的問題是它沒有包含在SQL Server 2005支持的框架庫集中,因此對我不起作用,因為我需要支持2005-2014,但是對於任何不需要擔心SQL Server 2005的人都應該可以。
  • 有關SQLCLR主題的更多詳細信息,我在SQL Server Central中有一系列文章(需要免費注冊): SQLCLR的階梯

暫無
暫無

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

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