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;