Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'esempio Hello World illustra le operazioni di base coinvolte nella creazione, distribuzione e test di una semplice stored procedure basata sull'integrazione basata su CLR (Common Language Runtime). In questo esempio viene inoltre illustrato come restituire dati tramite un record, costruito dinamicamente 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 gratuitamente SQL Server Express dalla documentazione di SQL Server Express e dal sito Web degli esempi
Database AdventureWorks disponibile nel sito Web per sviluppatori di SQL Server
.NET Framework SDK 2.0 o versione successiva o Microsoft Visual Studio 2005 o versione successiva. È possibile ottenere gratuitamente .NET Framework SDK.
Inoltre, devono essere soddisfatte le condizioni seguenti:
L'istanza di SQL Server in uso deve avere l'integrazione CLR abilitata.
Per abilitare l'integrazione con CLR, seguire questa procedura:
Abilitazione dell'integrazione con CLR
- Eseguire i comandi di Transact-SQL seguenti:
sp_configure 'clr enabled', 1GORECONFIGUREGOAnnotazioni
Per abilitare CLR, è necessario disporre
ALTER SETTINGSdell'autorizzazione a livello di server, che viene mantenuta in modo implicito dai membri dei ruoli predefiniti delsysadminserver 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 usando le istruzioni seguenti:
Aprire un prompt dei comandi di Visual Studio o .NET Framework.
Se necessario, creare una directory per l'esempio. Per questo esempio si userà C:\MySample.
In c:\MySample creare
HelloWorld.vb(per l'esempio di Visual Basic) oHelloWorld.cs(per l'esempio C#) e copiare il codice di esempio di Visual Basic o C# appropriato (di seguito) nel file.Compilare il codice di esempio dal prompt della riga di comando eseguendo una delle opzioni seguenti, a seconda del linguaggio scelto.
vbc C:HelloWorld.vb /target:librarycsc /target:library HelloWorld.cs
Copiare il codice di installazione Transact-SQL in un file e salvarlo come
Install.sqlnella directory di esempio.Distribuire l'assembly e la stored procedure eseguendo
sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
Copiare Transact-SQL script del comando di test in un file e salvarlo come
test.sqlnella 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.sqlnella directory di esempio.Eseguire lo script con il comando seguente
sqlcmd -E -I -i cleanup.sql
Codice di esempio
Di seguito sono riportati gli elenchi di codice per questo 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
Si tratta di test.sql, che verifica 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
Nell'Transact-SQL seguente l'assembly e la stored procedure vengono rimossi 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)