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


Образец «Hello World»

Образец 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 2.0 для платформы .NET Framework или более поздняя версия либо среда 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.

  • На используемом экземпляре SQL Server должна быть установлена база данных AdventureWorks.

  • Если вы не являетесь администратором используемого экземпляра 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