Esempio Hello World
Nell'esempio Hello World vengono illustrate le operazioni di base per la creazione, la distribuzione e il test di una stored procedure semplice basata sull'integrazione con CLR. Nell'esempio viene inoltre illustrato come restituire dati tramite un record, che viene costruito in modo dinamico dalla stored procedure e restituito al chiamante.
La HelloWorld
stored procedure restituisce la stringa "Hello world!" in un set di risultati costituito da una riga. Questo esempio illustra alcuni usi per le classi Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord e Microsoft.SqlServer.Server.Pipe.
Prerequisiti
Per creare ed eseguire questo progetto, è necessario installare il software seguente:
SQL Server o SQL Server Express. È possibile ottenere SQL Server Express gratuitamente dal sito Web documentazione ed esempi di SQL Server Express
Database AdventureWorks disponibile nel sito Web SQL Server Developer
.NET Framework SDK 2.0 o versione successiva oppure Microsoft Visual Studio 2005 o versione successiva. .NET Framework SDK è disponibile gratuitamente.
È necessario inoltre che siano soddisfatte le condizioni seguenti:
L'istanza di SQL Server in uso deve avere l'integrazione CLR abilitata.
Per abilitare l'integrazione con CLR, effettuare le operazioni seguenti:
Abilitazione dell'integrazione con CLR
- Eseguire i comandi Transact-SQL seguenti:
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
Nota
Per abilitare CLR, è necessario disporre dell'autorizzazione
ALTER SETTINGS
a livello di server, che viene assegnata implicitamente ai membri dei ruoli predefiniti del serversysadmin
eserveradmin
.Il database AdventureWorks deve essere installato nell'istanza di SQL Server in uso.
Se non si è un amministratore per l'istanza di SQL Server in uso, è necessario disporre di un amministratore che conceda l'autorizzazione CreateAssembly per completare l'installazione.
Compilazione dell'esempio
Creare ed eseguire l'esempio tramite le istruzioni seguenti:
Aprire un prompt dei comandi di .NET Framework o Visual Studio.
Se necessario, creare una directory per l'esempio. Per questo esempio verrà utilizzata la directory C:\MySample.
In c:\MySample creare
HelloWorld.vb
(per l'esempio Visual Basic) oHelloWorld.cs
(per l'esempio C#) e copiare nel file il codice di esempio appropriato, Visual Basic o C#, riportato di seguito.Compilare il codice di esempio dal prompt della riga di comando eseguendo una delle istruzioni seguenti, a seconda del linguaggio scelto.
vbc C:HelloWorld.vb /target:library
csc /target:library HelloWorld.cs
Copiare il codice di installazione Transact-SQL in un file e salvarlo come
Install.sql
nella directory di esempio.Distribuire l'assembly e la stored procedure eseguendo
sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
Copiare lo script del comando di test Transact-SQL in un file e salvarlo come
test.sql
nella directory di esempio.Eseguire lo script di test con il comando seguente
sqlcmd -E -I -i test.sql
Copiare lo script di pulizia Transact-SQL in un file e salvarlo come
cleanup.sql
nella directory di esempio.Eseguire lo script con il comando seguente
sqlcmd -E -I -i cleanup.sql
Codice di esempio
Di seguito sono illustrati i listati di codice per l'esempio.
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
Si tratta dello script di installazione Transact-SQL (Install.sql
), che distribuisce l'assembly e crea la stored procedure nel database.
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
Di seguito è illustrato lo script test.sql
che consente di testare l'esempio eseguendo la stored procedure.
use AdventureWorks
go
execute usp_HelloWorld
USE AdventureWorks;
GO
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')
DROP PROCEDURE usp_HelloWorld;
GO
Il codice Transact-SQL seguente rimuove l'assembly e la stored procedure dal database.
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
Vedere anche
Scenari di utilizzo ed esempi per l'integrazione con CLR (Common Language Runtime)