Sdílet prostřednictvím


Začínáme s integrací CLR

platí pro:SQL Server

Tento článek obsahuje přehled jmenných prostorů a knihoven potřebných ke kompilaci databázových objektů pomocí integrace SQL Serveru se společným jazykovým modulem CLR (.NET Framework). V článku se také dozvíte, jak psát, kompilovat a spouštět malou uloženou proceduru CLR napsanou v jazyce C# a Visual Basic .NET.

Požadované obory názvů

Komponenty potřebné k vývoji základních databázových objektů CLR se instalují s SQL Serverem. Funkce integrace CLR je zpřístupněna v sestavení s názvem System.Data.dll, což je součást rozhraní .NET Framework. Toto sestavení lze najít v globální mezipaměti sestavení (GAC) a v adresáři rozhraní .NET Framework. Odkaz na toto sestavení je obvykle automaticky přidán nástroji příkazového řádku i sadou Visual Studio, takže není nutné ho přidávat ručně.

Sestavení System.Data.dll obsahuje následující obory názvů, které jsou vyžadovány pro kompilaci databázových objektů CLR:

  • System.Data
  • System.Data.Sql
  • Microsoft.SqlServer.Server
  • System.Data.SqlTypes

Spropitné

Načítání databázových objektů CLR v Linuxu je podporované, ale musí být sestaveny pomocí rozhraní .NET Framework (integrace MODULU CLR s SQL Serverem nepodporuje .NET Core nebo .NET 5 a novější verze). Sestavení CLR se sadou oprávnění EXTERNAL_ACCESS nebo UNSAFE nejsou podporována v Linuxu.

Napište uloženou proceduru "Hello World"

Zkopírujte a vložte následující kód C# nebo Visual Basic .NET do textového editoru a uložte ho do souboru s názvem helloworld.cs nebo helloworld.vb.

using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;

public class HelloWorldProc
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void HelloWorld(out string text)
    {
        SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
        text = "Hello world!";
    }
}

Tento program obsahuje jednu statickou metodu veřejné třídy. Tato metoda používá dvě nové třídy, SqlContext a SqlPipe, pro vytváření spravovaných databázových objektů pro výstup krátké textové zprávy. Metoda také přiřadí řetězec "Ahoj světe!" jako hodnotu pro parametr out. Tuto metodu lze deklarovat jako uloženou proceduru v SQL Serveru a pak spustit stejným způsobem jako Transact-SQL uložená procedura.

Zkompilujte tento program jako knihovnu, načtěte ho do SQL Serveru a spusťte ho jako uloženou proceduru.

Zkompilovat uloženou proceduru "Hello World"

SQL Server ve výchozím nastavení nainstaluje soubory redistribuce rozhraní .NET Framework. Mezi tyto soubory patří csc.exe a vbc.exe, kompilátory příkazového řádku pro programy C# a Visual Basic .NET. Abyste mohli zkompilovat naši ukázku, musíte upravit proměnnou cesty tak, aby odkazoval na adresář obsahující csc.exe nebo vbc.exe. Následující cesta je výchozí instalační cesta rozhraní .NET Framework.

C:\Windows\Microsoft.NET\Framework\(version)

Verze obsahuje číslo verze nainstalované rozhraní .NET Framework. Například:

C:\Windows\Microsoft.NET\Framework\v4.8.0

Jakmile do cesty přidáte adresář rozhraní .NET Framework, můžete ukázkovou uloženou proceduru zkompilovat do sestavení pomocí následujícího příkazu. Možnost /target umožňuje ji zkompilovat do sestavení.

Pro zdrojové soubory jazyka C#:

csc /target:library helloworld.cs

Zdrojové soubory .NET jazyka Visual Basic:

vbc /target:library helloworld.vb

Tyto příkazy spouštějí kompilátor jazyka C# nebo Visual Basic .NET pomocí možnosti /target k určení sestavení knihovny DLL.

Načtení a spuštění uložené procedury Hello World na SQL Serveru

Jakmile se ukázková procedura úspěšně zkompiluje, můžete ji otestovat na SQL Serveru. Uděláte to tak, že otevřete APLIKACI SQL Server Management Studio a vytvoříte nový dotaz, který se připojí k vhodné testovací databázi (například ukázkovou databázi AdventureWorks2022).

Možnost spouštění kódu CLR (Common Language Runtime) je ve výchozím nastavení nastavená na OFF v SQL Serveru. Kód CLR lze povolit pomocí uložené procedury sp_configure systému. Další informace najdete v tématu Povolení integrace CLR.

Potřebujeme vytvořit sestavení, abychom měli přístup k uložené proceduře. V tomto příkladu předpokládáme, že jste vytvořili sestavení helloworld.dll v adresáři C:\. Do dotazu přidejte následující příkaz Transact-SQL.

CREATE ASSEMBLY helloworld from 'C:\helloworld.dll' WITH PERMISSION_SET = SAFE

Po vytvoření sestavení teď můžeme získat přístup k metodě HelloWorld pomocí příkazu CREATE PROCEDURE. Voláme uloženou proceduru hello:

CREATE PROCEDURE hello
(@i NCHAR (25) OUTPUT)
AS EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld;

Poznámka

Pokud je v předchozím příkladu třída HelloWorldProc uvnitř oboru názvů (nazývá se MyNS), poslední řádek příkazu pro vytvoření procedury by byl EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld;.

Po vytvoření se dá procedura spustit stejně jako normální uložená procedura napsaná v jazyce Transact-SQL. Spusťte následující příkaz:

DECLARE @J AS NCHAR (25);
EXECUTE hello @J OUTPUT;
PRINT @J;

Tady je očekávaný výstup.

Hello world!
Hello world!

Odeberte ukázku uložené procedury "Hello World"

Po dokončení spuštění ukázkové uložené procedury můžete z testovací databáze odebrat proceduru a sestavení.

Nejprve odeberte proceduru pomocí příkazu drop procedure.

IF EXISTS (SELECT name
           FROM sysobjects
           WHERE name = 'hello')
    DROP PROCEDURE hello;

Po vyřazení procedury můžete odebrat sestavení obsahující váš ukázkový kód.

IF EXISTS (SELECT name
           FROM sys.assemblies
           WHERE name = 'helloworld')
    DROP ASSEMBLY helloworld;