Поделиться через


Пример программы "Привет, мир"

Пример Hello World демонстрирует основные операции, которые участвуют в создании, развертывании и тестировании простой хранимой хранимой процедуры на основе среды CLR. В этом примере также показано, как возвращать данные через запись, которая динамически создается хранимой процедурой и возвращается вызывающей функции.

Хранимая HelloWorld процедура возвращает строку "Hello world!" в результирующем наборе, состоящем из одной строки. В этом примере показаны некоторые способы использования классов Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord и Microsoft.SqlServer.Server.Pipe.

Предпосылки

Чтобы создать и запустить этот проект, необходимо установить следующее программное обеспечение:

  • SQL Server или SQL Server Express. Вы можете бесплатно получить SQL Server Express на веб-сайте документации и примеров SQL Server Express.

  • База данных AdventureWorks, доступная на веб-сайте разработчика SQL Server

  • Пакет SDK для .NET Framework 2.0 или более поздней версии или Microsoft Visual Studio 2005 или более поздней версии. Пакет SDK для .NET Framework можно получить бесплатно.

  • Кроме того, необходимо выполнить следующие условия:

  • Экземпляр 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  

См. также

Сценарии использования и примеры интеграции со средой CLR