Образец «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 .
Построение образца
Создайте и запустите образец в соответствии со следующими инструкциями.
Откройте командную строку Visual Studio или .NET Framework.
Если необходимо, создайте каталог для своего образца. В данном примере будет использоваться каталог C:\MySample.
В каталоге c:\MySample создайте файл HelloWorld.vb (для образца на языке Visual Basic) или HelloWorld.cs (для образца на языке C#) и скопируйте в него соответствующий образец кода на языке Visual Basic или C#, приведенный ниже.
Скомпилируйте образец кода из командной строки, выполнив одну из следующих команд, в зависимости от выбранного языка.
vbc C:HelloWorld.vb /target:library
csc /target:library HelloWorld.cs
Скопируйте код установки Transact-SQL в файл и сохраните его в файле Install.sql в том же каталоге.
Разверните сборку и хранимую процедуру, выполнив
- sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
Скопируйте скрипт проверки Transact-SQL в файл и сохраните его в файле test.sql в том же каталоге.
Выполните скрипт проверки следующей командой
- sqlcmd -E -I -i test.sql
Скопируйте скрипт очистки Transact-SQL в файл и сохраните его в файле cleanup.sql в том же каталоге.
Выполните скрипт следующей командой
- 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