Co jsou projekty databáze SQL?
platí pro: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Database v Microsoft Fabric
Projekt databáze SQL je místní reprezentace objektů SQL, které tvoří schéma pro jednu databázi, jako jsou tabulky, uložené procedury nebo funkce. Vývojový cyklus projektu databáze SQL umožňuje integraci vývoje databází do pracovních postupů kontinuální integrace a průběžného nasazování (CI/CD), které jsou známé jako osvědčený postup vývoje.
Přehled
Projekty SQL jsou založené na deklarativních příkazech T-SQL. V kódu projektu databáze SQL vytvoříte každý objekt jednou. Pokud potřebujete něco o tomto objektu změnit, například přidat sloupce nebo změnit datový typ, upravíte jednotný soubor, který objekt deklaruje poprvé a jen jednou.
Při sestavení projektu databáze SQL je výstupní artefakt souborem .dacpac
. Nové a existující databáze je možné aktualizovat tak, aby odpovídaly obsahu .dacpac
publikováním .dacpac
do cílové databáze.
Rámec projektů SQL databáze kolem vašeho databázového kódu přidává do této sady souborů dvě základní funkce jako součást procesu kompilace:
- ověření odkazů mezi objekty a syntaxí vůči konkrétní verzi SQL
- nasazení buildu artefaktu do nových nebo stávajících databází
Funkce pro projekty databáze SQL poskytuje knihovna Microsoft.SqlServer.DacFx .NET a je uvedena v několika nástrojích pro vývoj SQL. DacFx má několik bodů rozšiřitelnosti, jako je úprava kroků nasazení a schopnost vytvářet vlastní pravidla pro analýzu kódu. SDK projektu pro projekty SQL je Microsoft.Build.Sql, která je aktuálně dostupná v předběžné verzi a doporučená pro nový vývoj.
Validace
Při sestavení projektu SQL se ověří relace mezi objekty. Definice zobrazení například nemůže obsahovat tabulku nebo sloupce, které v projektu SQL neexistují.
Projekt SQL navíc obsahuje vlastnost v souboru .sqlproj
s názvem "cílová platforma". Tyto informace se používají během procesu sestavení k ověření, že funkce a syntaxe T-SQL existují v této verzi SQL. Například funkce JSON přidané v SQL Serveru 2022 se nedají použít v projektu SQL nastaveném na cílovou platformu SQL140 (SQL Server 2017).
K sestavení projektu SQL spustíme příkaz dotnet build z příkazového řádku. V grafických nástrojích, které podporují projekty SQL (Azure Data Studio, VS Code a Visual Studio), je k dispozici položka nabídky pro sestavení projektu SQL.
Výstup konzoly procesu sestavení může obsahovat chyby (selhání sestavení) nebo upozornění. Upozornění sestavení mohou zahrnovat nekonzistentní velikost písmen v názvech objektů a další přizpůsobitelné osvědčené postupy, ale neselžou sestavení.
Výstupem artefaktu procesu sestavení je soubor .dacpac
, který najdete pro sestavení s výchozím nastavením ve složce bin/Debug
.
Nasazení
Výstupní soubor, .dacpac
, je výkonný, opakovaně použitelný a deklarativní artefakt. S tímto souborem můžeme použít SqlPackage nebo jiné nástroje k aplikaci našeho databázového kódu na databázi. Příkaz SqlPackage pro nasazení .dacpac
je publish příkaz.
Například sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}
.
Nové databáze
SqlPackage při publikování dacpac do nové databáze prochází relacemi objektů a vytváří každý objekt ve správném pořadí. SqlPackage například vytvoří Table_A před Table_B, když Table_B má cizí klíč pro Table_A.
Nechcete spouštět celou složku skriptů SQL, zvlášť pokud byste mohli používat projekty SQL, které automaticky spouští jednotlivé části T-SQL ve správném pořadí na základě relací objektů.
Existující databáze
Kromě navigace v hierarchii objektů při publikování do nových databází proces publikování .dacpac
také vypočítá rozdíl mezi zdrojovým .dacpac
a cílovou databází před určením kroků, které je potřeba provést při aktualizaci této databáze. Pokud například Table_C v databázi chybí dva sloupce, které má v projektu SQL, a StoredProcedure_A byla změněna, SqlPackage vytvoří příkaz ALTER TABLE
a příkaz ALTER PROCEDURE
místo toho, aby naslepo vytvářel spoustu objektů.
Flexibilita poskytovaná příkazem publikovat do existujících databází není omezena na jednu databázi. Jednu .dacpac
je možné nasadit vícekrát, například při upgradu flotily stovek databází.
Kdy použít
Projekty databáze SQL jsou ideální pro týmy, které chtějí integrovat vývoj databází do pracovního postupu CI/CD. Deklarativní povaha projektů SQL umožňuje jeden zdroj pravdy pro schéma databáze a proces sestavení a publikování poskytuje opakovatelný a spolehlivý způsob nasazení změn do databází.
Projekty databáze SQL se používají ke sledování zdroje pravdy pro stav databáze, včetně vývoje pomocí objektově-relačního mapovače (ORM), jako je EF Core. K extrakci schématu databáze do projektu SQL můžete použít grafický nástroj nebo příkazový řádek bez ohledu na ORM použitý k vytvoření databáze.
Projekty databází SQL podporují SQL Server a řadu databází Azure SQL, včetně Azure SQL Database a Azure Synapse Analytics. Bez ohledu na to, jestli vyvíjíte aplikaci nebo datový sklad, můžete použít projekty databáze SQL ke správě schématu databáze. Projekty SQL lze vyvíjet pomocí nástrojů v aplikacích Visual Studio, VS Code a Azure Data Studio.
Původní projekty vs. projekty ve stylu sady SDK (Preview)
Původní formát projektu SQL je založený na nástroji MSBuild (.NET Framework) a je formát používaný nástroji SQL Server Data Tools v sadě Visual Studio. Formát projektu ve stylu sady SDK je založený na nových projektech ve stylu sady SDK zavedených v .NET Core a je formát používaný rozšířením SQL Database Projects pro Azure Data Studio a VS Code. Podpora SQL projektů ve stylu SDK v sadě Visual Studio je na roadmapě .
Nová vývojová práce by měla zvážit použití formátu projektu ve stylu sady SDK, protože se jedná o formát, který bude v budoucnu podporován. Formát projektu ve stylu sady SDK je flexibilnější a obsahuje nové funkce, které nejsou k dispozici v původních projektech SQL:
- Podpora .NET 8 (pro různé platformy)
- Odkazy na balíčky NuGet pro odkazy na databáze
- Výchozí vzor globbingu pro soubory .sql v projektu
Projekty ve stylu sady SDK mají nadmnožinu funkcí z původních projektů SQL a existující projekty SQL lze převést na projekty ve stylu sady SDK prostřednictvím úprav souboru projektu.
Výjimkou pokrytí funkčnosti je podpora pro objekty SQLCLR, které vyžadují rozhraní .NET Framework. Projekt, který obsahuje objekty SQLCLR, lze převést na projekt ve stylu sady SDK, ale projekt vyžaduje rozhraní .NET Framework a musí být sestaven v sadě Visual Studio ve Windows. Jakmile se projekt s objektem SQLCLR sestaví, můžete .dacpac
nasadit pomocí SqlPackage na .NET a .NET Framework a použít ho jako odkaz na .dacpac
v projektu (stejná databáze nebo na stejném serveru jiná databáze).
Související obsah
- Project-Oriented vývoj offline databází
- rozšíření pro SQL Database Projects
- sqlpackage
- Ukázkové CI/CD procesy pro projekty SQL
- akce SQL Na GitHubu
- nasazení SQL Azure DevOps
- aplikace datové vrstvy (DAC)
- úložiště zpětné vazby DacFx
- Začínáme s projekty databáze SQL
- kurz : Vytvoření a nasazení projektu SQL