共用方式為


使用可驗證的組件搭配 SQL Server (C++/CLI)

封裝為動態連結程式庫 (DLL) 的延伸預存程序,會透過使用 Visual C++ 開發的函式來提供擴充的 SQL Server 功能。 延伸預存程序會實作為 DLL 內的函式。 除了函式以外,延伸預存程序還可以定義使用者定義型別彙總函式 (例如 SUM 和 AVG)。

當用戶端執行了延伸預存程序時,SQL Server 會搜尋與延伸預存程序有關的 DLL 並載入 DLL。 SQL Server 會呼叫要求的延伸預存程序,並在指定的安全性內容中執行它。 然後延伸預存程序會傳遞結果集,並將參數傳回至伺服器。

SQL Server 2005 提供了 Transact-SQL (T-SQL) 的擴充部分,讓您能把可驗證的組件安裝至 SQL Server。 SQL Server 使用權限集合會以下列的安全性層級來指定安全性內容:

  • 不受限制模式:您必須自行承擔執行程式碼的風險,因為程式碼沒有經過型別安全的驗證。

  • 安全模式:執行可驗證的型別安全程式碼,使用 /clr:safe 編譯。

安全模式要求所執行的組件必須通過型別安全的驗證。

若要建立可驗證的組件並將它載入 SQL Server,請使用 Transact-SQL 命令 CREATE ASSEMBLY 和 DROP ASSEMBLY,如下所示:

CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH 
  PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>

PERMISSION_SET 命令會指定安全性內容,並可以擁有 UNRESTRICTED、SAFE 或 EXTENDED 值。

此外,您可以使用 CREATE FUNCTION 命令,繫結至類別中的方法名稱:

CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]

範例

下列 SQL 指令碼 (例如,名為 "MyScript.sql") 會載入組件至 SQL Server,並且能夠讓您使用類別的方法:

-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from 
'c:\stockNoEA.dll'
with permission_set safe

-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go

-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go

SQL 指令碼可以在 SQL Query Analyzer 中以互動的方式執行,或是在命令列搭配 sqlcmd.exe 公用程式使用。 下列命令列會連接至 MyServer、使用預設資料庫和信任的連接、並且輸入 MyScript.sql 和輸出 MyResult.txt。

sqlcmd –S MyServer -E –i myScript.sql –o myResult.txt

請參閱

參考

HOW TO:移轉至 /clr:safe (C++/CLI)

類別、 結構和等位