共用方式為


Hello World 範例

Hello World 範例示範建立、部署及測試簡單 Common Language Runtime (CLR) 整合型預存程式所涉及的基本作業。 此範例也會示範如何透過記錄傳回數據,該記錄是由預存程式動態建構並傳回給呼叫端。

HelloWorld 存程式會傳回結果集中包含一個數據列的字串 “Hello world!” 。 此範例說明 Microsoft.SqlServer.Server.SqlMetaDataMicrosoft.SqlServer.Server.SqlDataRecordMicrosoft.SqlServer.Server.Pipe 類別的一些用法。

先決條件

若要建立並執行此專案,必須安裝下列軟體:

  • SQL Server 或 SQL Server Express。 您可以從 SQL Server Express 檔和範例網站免費取得 SQL Server Express

  • SQL Server 開發人員網站提供的 AdventureWorks 資料庫

  • .NET Framework SDK 2.0 或更新版本或Microsoft Visual Studio 2005 或更新版本。 您可以免費取得 .NET Framework SDK。

  • 此外,必須符合下列條件:

  • 您使用的 SQL Server 實例必須啟用 CLR 整合。

  • 若要啟用 CLR 整合,請執行下列步驟:

    啟用 CLR 整合

    • 執行下列 Transact-SQL 命令:

    sp_configure 'clr enabled', 1

    GO

    RECONFIGURE

    GO

    備註

    若要啟用 CLR,您必須具有ALTER SETTINGS由 和 sysadmin 固定伺服器角色成員serveradmin隱含持有的伺服器層級許可權。

  • AdventureWorks 資料庫必須安裝在您使用的 SQL Server 實例上。

  • 如果您不是您使用之 SQL Server 實例的系統管理員,您必須有系統管理員授與 CreateAssembly 許可權才能完成安裝。

建立範例

使用下列指示建立並執行範例:

  1. 開啟 Visual Studio 或 .NET Framework 命令提示字元。

  2. 如有必要,請為您的範例建立目錄。 在此範例中,我們將使用 C:\MySample。

  3. 在 c:\MySample 中,建立 HelloWorld.vb (針對 Visual Basic 範例) 或 HelloWorld.cs [C# 範例] ,並將適當的 Visual Basic 或 C# 範例程式代碼 (以下) 複製到 檔案中。

  4. 視您選擇的語言而定,從命令行提示字元編譯範例程式代碼,方法是執行下列其中一項。

    • vbc C:HelloWorld.vb /target:library

    • csc /target:library HelloWorld.cs

  5. 將 Transact-SQL 安裝程式代碼複製到檔案中,並將它儲存為 Install.sql 範例目錄中。

  6. 執行 來部署元件和預存程式

    • sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
  7. 將 Transact-SQL 測試命令文本複製到檔案中,並將其儲存為 test.sql 範例目錄中。

  8. 使用下列命令執行測試腳本

    • sqlcmd -E -I -i test.sql
  9. 將 Transact-SQL 清除文本複製到檔案中,並將其儲存為 cleanup.sql 範例目錄中。

  10. 使用下列命令執行腳本

    • sqlcmd -E -I -i cleanup.sql

範例程式碼

以下是此範例的程式代碼清單。

C#

using System;  
using System.Data;  
using System.Data.SqlClient;  
using System.Data.SqlTypes;  
using Microsoft.SqlServer.Server;  
public partial class StoredProcedures  
{  
    [Microsoft.SqlServer.Server.SqlProcedure]  
    public static void HelloWorld()  
    {  
        Microsoft.SqlServer.Server.SqlMetaData columnInfo  
                = new Microsoft.SqlServer.Server.SqlMetaData("Column1", SqlDbType.NVarChar, 12);  
        SqlDataRecord greetingRecord  
            = new SqlDataRecord(new Microsoft.SqlServer.Server.SqlMetaData[] { columnInfo });  
        greetingRecord.SetString(0, "Hello world!");  
        SqlContext.Pipe.Send(greetingRecord);  
    }  
};  
  

Visual Basic

Imports System  
Imports System.Data  
Imports System.Data.Sql  
Imports System.Data.SqlTypes  
Imports Microsoft.SqlServer.Server  
  
Partial Public NotInheritable Class StoredProcedures  
    <Microsoft.SqlServer.Server.SqlProcedure()> _  
    Public Shared Sub HelloWorld()  
        Dim columnInfo As New Microsoft.SqlServer.Server.SqlMetaData("Column1", _  
            SqlDbType.NVarChar, 12)  
        Dim greetingRecord As New SqlDataRecord(New  _  
            Microsoft.SqlServer.Server.SqlMetaData() {columnInfo})  
        greetingRecord.SetString(0, "Hello World!")  
        SqlContext.Pipe.Send(greetingRecord)  
    End Sub  
End Class  

這是 Transact-SQL 安裝文本 (Install.sql),它會部署元件,並在資料庫中建立預存程式。

USE AdventureWorks  
GO  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'HelloWorld')  
DROP ASSEMBLY HelloWorld;  
GO  
DECLARE @SamplesPath nvarchar(1024)  
set @SamplesPath = '$(root)'  
CREATE ASSEMBLY HelloWorld   
FROM @SamplesPath + 'HelloWorld.dll'  
WITH permission_set = Safe;  
GO  
  
CREATE PROCEDURE usp_HelloWorld  
--(  
--    @Greeting nvarchar(12) OUTPUT  
--)  
AS EXTERNAL NAME HelloWorld.[StoredProcedures].HelloWorld;  
GO  

這是 test.sql,其會執行預存程式來測試範例。

use AdventureWorks  
go  
execute usp_HelloWorld  
  
USE AdventureWorks;  
GO  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  

下列 Transact-SQL 會從資料庫移除元件和預存程式。

USE AdventureWorks  
GO  
  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  
  
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'HelloWorld')  
DROP ASSEMBLY HelloWorld;  
GO  

另請參閱

Common Language Runtime (CLR) 整合的使用案例和範例