成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server數據庫托管代碼的使用詳解

數據庫 SQL Server
本文我們主要介紹了SQL Server數據庫托管代碼的使用方法,通過一個實際的例子對托管代碼的使用進行了詳細的說明,希望能夠對您有所幫助。

SQL Server數據庫托管代碼的使用是本文我們主要要介紹的內容,我們知道,SQL Server是一個非托管的應用程序,但是開發人員可以用托管代碼創建數據庫存儲過程、觸發器或者函數。這樣開發人員就可以利用其他語言來編寫數據庫存儲過程、觸發器或者函數,不僅可以使用FCL或其他程序集中的類型,還可以享受.net framerwork中強大類庫的功能。

當***請求一個用托管代碼寫的存儲過程時, MSSQL會加載CLR,存儲過程會在獨立的應用程序域運行,這樣不會對數據庫本身產生影響。托管代碼會被JIT編譯成本地代碼執行,而不是解釋執行,這保證了托管代碼的執行效率。

編寫托管代碼

為了使用托管代碼創建數據庫存儲過程、觸發器或者函數,只需要對托管代碼中具體方法使用Microsoft.SqlServer.Server命名空間下的特性:[SqlProcedure]、[SqlFunction]或者[SqlTrigger]。當然方法的參數和返回值相應會有一定的限制。

比如寫一個隨機散列算法的方法,聲明成MSSQL的存儲過程:

 

  1. GetHashText方法   
  2.  
  3. namespace Wuhong.ClrSp  
  4. {  
  5. public class StoredProcedures  
  6. {  
  7. [Microsoft.SqlServer.Server.SqlProcedure]  
  8. public static void GetHashText(string plainText, out string encryptedText, ref int hashProvider, ref string saltText)  
  9. {  
  10. //方法體略……  
  11.  }  
  12.  }  

 

至此,可以利用托管代碼完成一切數據庫腳本所無法完成的功能。

特別的,托管代碼中也可以訪問當前的數據庫,但與普通方法訪問數據庫有兩處不同:

一是連接字符串要使用上下文鏈接(Context Connection),"context connection=true"。這表示代碼中的數據庫上下文跟托管代碼調用方的數據庫上下文一致。

二是將結果集、消息或命令執行結果發送回客戶端時需要通過數據庫上下文專門的管道對象SqlContext.Pipe來發送。

開啟CLR集成

默認情況下, CLR集成功能在MSSQL中處于禁用狀態。若要使用 SQL CLR 項目項,必須啟用 CLR 集成。

 

  1. sp_configure  
  2.  
  3. sp_configure 'clr enabled',1  
  4. GO  
  5.  RECONFIGURE  
  6. GO 

 

創建程序集

生成托管代碼程序集后,需要在MSSQL中創建相應的托管應用程序模塊,將其作為MSSQL實例中的對象。通過引用此模塊,可在數據庫中創建CLR函數、存儲過程、觸發器。

創建ASSEMBLY

  1. CREATE ASSEMBLY [Wuhong.ClrSp]   
  2. FROM 'F:\website\Wuhong.ClrSp.dll'  
  3. WITH PERMISSION_SET = SAFE

 

WITH PERMISSION_SET指定MSSQL向程序集授予的一組代碼訪問權限。SAFE是默認值。

SAFE 是***限制性的權限集。由具有 SAFE 權限的程序集所執行的代碼將無法訪問外部系統資源,例如文件、網絡、環境變量或注冊表。

EXTERNAL_ACCESS 使程序集可以訪問某些外部系統資源,例如文件、網絡、環境變量以及注冊表。UNSAFE 可使程序集不受限制地訪問資源,無論是MSSQL實例內部還是外部的資源都可以訪問。從 UNSAFE 程序集內運行的代碼可調用未托管代碼。

創建托管應用程序集的操作也可以在MSSQL Management Studio中手工完成。

創建存儲過程

下面是根據創建的托管模塊來創建存儲過程。

創建PROCEDURE

  1. CREATE PROCEDURE [dbo].[GetHashText]  
  2. @plainText [nvarchar](4000),  
  3. @encryptedText [nvarchar](4000) OUTPUT,  
  4. @hashProvider [int] OUTPUT,  
  5. @saltText [nvarchar](4000) OUTPUT  
  6. WITH EXECUTE AS CALLER  
  7. AS  
  8. EXTERNAL NAME [Wuhong.ClrSp].[StoredProcedures].[GetHashText]  
  9. GO 

 

WITH EXECUTE AS指定執行模塊的上下文,可以控制 數據庫引擎使用哪一個用戶帳戶來驗證對模塊引用的對象的權限。CALLER是默認值。

CALLER指定模塊內的語句在模塊調用方的上下文中執行。這表示執行模塊的用戶不僅必須對模塊本身擁有適當的權限,還要對模塊引用的任何數據庫對象擁有適當權限。

OWNER指定模塊內的語句在模塊的當前所有者上下文中執行。

SELF指定模塊內的語句在創建或更改模塊的用戶的上下文中執行。

'user_name'指定模塊內的語句在user_name指定的用戶的上下文中執行。

關于SQL Server數據庫中托管代碼的使用方法就介紹到這里了,希望本次的介紹能夠對您有所收獲!

【編輯推薦】

  1. SQL Server數據庫中FOR XML AUTO的使用詳解續
  2. SQL Server使用UNION代替OR提升查詢性能的實例
  3. SQL Server表中數據按條件批量導出為多個Excel文件
  4. Oracle數據庫分析函數應用實例之查找狀態全為1的ID
  5. Oracle handbook系列之虛擬專用數據庫VPD的使用詳解
責任編輯:趙鵬 來源: 博客園
相關推薦

2011-08-22 11:39:53

SQL Server數PIVOT

2011-08-11 09:12:31

SQL Server nolock

2011-08-22 13:28:56

FOR XMLSQL Server

2021-03-18 08:20:19

SQLServer數據庫SQL

2011-08-25 16:50:20

SQL ServerAccessASP

2011-08-15 14:29:52

SQL Server數事務

2011-08-24 09:15:36

SQL Server數FOR XML AUT

2011-08-15 13:48:47

SQL ServerROW_NUMBER(

2011-08-22 12:01:36

SQL Server代碼優化

2011-08-30 11:04:30

鏈接查詢內連接外連接

2011-08-22 10:47:09

SQL Server流水號

2010-07-15 17:28:50

SQL Server

2011-04-02 11:02:54

SQL Server數文件恢復

2011-08-19 14:53:02

SQL ServerDataRelatio

2011-08-09 17:24:21

SQL Server 數據庫日志

2011-08-25 13:41:50

SQL Server 變更跟蹤

2010-03-16 10:12:40

SQL Server

2010-06-17 10:02:12

SQL Server數

2009-04-30 09:28:05

SynonymOpenquerySQL Server

2010-07-08 11:05:14

SQL Server數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 颜色网站在线观看 | 国产美女自拍视频 | 国产精品久久久久久久免费大片 | 一区二区三区四区在线 | 亚洲免费在线 | 色精品视频 | 亚洲av毛片| 久久男人 | 日韩在线不卡 | 丁香婷婷久久久综合精品国产 | 一级网站| 国产精品视频一二三区 | 中文av电影| 久久精品免费 | 91在线视频免费观看 | 久热久热 | 99热在线免费 | 久久久久9999 | 亚洲精品欧美一区二区三区 | 成人在线视频一区二区三区 | 电影91久久久 | 国产一区二区在线91 | 欧美黄色绿像 | 美女操网站| 国产精品久久久久久吹潮 | 国产精品久久久久久久久久久久 | 国产成人啪免费观看软件 | 国产精品久久久久一区二区 | 国产成人精品综合 | 91在线免费观看 | 九七午夜剧场福利写真 | 黄色三级在线播放 | 国产一区二区视频在线 | 国产成人午夜高潮毛片 | 久久国产精品网站 | 亚洲精品无 | 五月激情综合 | 中文字幕日本一区二区 | 91精品国产一区二区三区 | 武道仙尊动漫在线观看 | 国产亚洲精品a |