Compartir a través de


Referencias de paquetes de proyectos SQL

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

Las referencias de paquetes en proyectos SQL permiten hacer referencia a objetos de base de datos de otros proyectos o paquetes NuGet. Los objetos de base de datos agregados a un proyecto a través de referencias de paquete pueden formar parte de la misma base de datos, una base de datos diferente en el mismo servidor o una base de datos diferente en un servidor diferente.

Note

Las referencias de paquete son el método recomendado para hacer referencia a objetos de base de datos en el nuevo desarrollo. Hacer referencia a paquetes NuGet solo se admite en proyectos SQL de estilo SDK.

Referencias de paquetes de objetos de base de datos

Las referencias de paquete son uno de los varios métodos para agregar objetos de base de datos a un proyecto SQL como referencia de base de datos. Las referencias de paquete pueden contener objetos para la misma base de datos, una base de datos diferente en el mismo servidor o una base de datos diferente en otro servidor. Las referencias de paquete se pueden usar para dividir una base de datos en proyectos más pequeños y administrables, lo que puede ayudar a reducir el tiempo necesario para crear un proyecto durante el desarrollo local iterativo.

Captura de pantalla de un ejemplo de un proyecto SQL que hace referencia a dos paquetes y un proyecto para referencias de base de datos.

Ejemplo y sintaxis del archivo de proyecto SQL

Las referencias de paquete se agregan a un proyecto SQL mediante entradas en el archivo .sqlproj, de manera similar a los proyectos en C#. Cuando una referencia de paquete es a una base de datos diferente en el mismo servidor, se incluye un elemento <DatabaseSqlCmdVariable> en la referencia del paquete. Cuando una referencia de paquete es a una base de datos diferente en otro servidor, también se incluye un elemento <ServerSqlCmdVariable> en la referencia del paquete. Las referencias de paquete a la misma base de datos no incluyen elementos <ServerSqlCmdVariable> ni <DatabaseSqlCmdVariable>.

En el ejemplo siguiente se incluye una referencia de paquete al paquete Contoso.AdventureWorks.SalesLT como referencia de base de datos para la misma base de datos en la que los objetos del paquete forman parte del modelo de base de datos en el proyecto SQL:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks.SalesLT" Version="1.1.0" />
  </ItemGroup>
</Project>

En el ejemplo siguiente se incluye una referencia de paquete al Contoso.AdventureWorks paquete como referencia de base de datos para una base de datos diferente (AdventureWorks) en el mismo servidor donde los objetos del paquete forman parte del modelo de base de datos en el proyecto SQL:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks" Version="1.1.0">
      <DatabaseSqlCmdVariable>AdventureDB</DatabaseSqlCmdVariable>
      <DacpacName>AdventureWorks</DacpacName>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <SqlCmdVariable Include="AdventureDB">
      <DefaultValue>AdventureWorks</DefaultValue>
      <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>

En este ejemplo, el archivo AdventureWorks .dacpac se publica como un paquete Contoso.AdventureWorks versión 1.1.0 en una fuente NuGet. El <DatabaseSqlCmdVariable> elemento especifica el nombre de la base de datos en el mismo servidor donde se encuentran los objetos del paquete y se usarían para indicar esta referencia en nomenclatura de tres partes. La variable AdventureDB se usa para establecer el nombre de la base de datos en el momento de la implementación y se usa en el proyecto de forma similar a esta consulta de ejemplo:

SELECT * FROM [$(AdventureDB)].dbo.Customers;

El <DacpacName> elemento especifica el nombre del .dacpac archivo para la referencia del paquete, sin la extensión de archivo ni la ruta de acceso. El <DacpacName> elemento es opcional y solo es necesario cuando el nombre del .dacpac archivo es diferente del nombre del paquete.

Bases de datos del sistema

Las bases de datos del sistema SQL (master, msdb) se publican en NuGet.org como paquetes de referencia de base de datos. Estos paquetes contienen el esquema de las bases de datos del sistema y se pueden usar como referencias de paquete en proyectos SQL. Los paquetes de base de datos del sistema se versionan para alinearlos con la versión de SQL Server con la que están asociados. Por ejemplo, el paquete de base de datos del sistema master para SQL Server 2022 es Microsoft.SqlServer.Dacpacs.Master versión 160.2.1 y se puede agregar a un proyecto SQL como referencia de paquete:

...
  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
  </ItemGroup>
</Project>

Los cambios de versión secundaria reflejan correcciones de errores y cambios menores en el esquema dentro de una versión de SQL Server.

Los paquetes de base de datos del sistema disponibles son:

Paquetes NuGet de paquete dacpac

Un paquete de referencia de base de datos es un paquete NuGet que contiene un archivo .dacpac. El paquete NuGet se puede publicar en un feed de NuGet, como Azure Artifacts, para su uso en proyectos SQL. La creación de este paquete sigue el mismo proceso que la creación de un paquete NuGet para otros tipos de proyectos. Para obtener más información, consulte Creación de un paquete con la CLI de dotnet.

Captura de pantalla del resumen de la referencia del paquete para el proceso de proyectos SQL.

Para empaquetar un archivo .sqlproj como un paquete NuGet, use el comando dotnet pack desde la línea de comandos. De forma predeterminada, el comando dotnet pack crea un paquete NuGet a partir del archivo .sqlproj de la carpeta bin/Debug.

Los metadatos de paquete también se pueden especificar mediante propiedades dentro del elemento <PropertyGroup> en el archivo .sqlproj. Por ejemplo, las siguientes propiedades especifican el identificador de paquete, la versión, la descripción, los autores y la empresa:

<PackageId>Contoso.AdventureWorks.SalesLT</PackageId>
<Version>1.0.0</Version>
<Description>AdventureWorks database SalesLT objects</Description>
<Authors>DevTeam</Authors>
<Company>Contoso Outdoors</Company>

El archivo .nupkg creado mediante el comando dotnet pack se puede publicar en un feed de NuGet para su uso en proyectos SQL. Cualquier persona con acceso al paquete puede ver estos objetos de base de datos, por lo que se debe tener en cuenta la selección de una ubicación de fuente pública o privada. Para obtener más información, consulte Hospedaje con feeds de paquetes privados.

Al hacer referencia a un paquete donde PackageId es diferente del nombre del .dacpac archivo, el <DacpacName> elemento es necesario en la referencia del paquete al consumir el paquete.

Referencias de paquetes de reglas de análisis de código extendidas

Las referencias de paquete también se pueden usar para hacer referencia a más reglas de análisis de código que se desarrollaron como parte de la extensibilidad del análisis de código. La referencia de paquete de un paquete de reglas de análisis de código es similar a la referencia de paquete de un paquete de objetos de base de datos. En el ejemplo siguiente se muestra una referencia de paquete a un paquete de reglas de análisis de código personalizado:

<ItemGroup>
  <PackageReference Include="Your.CustomCode.AnalysisRules" Version="1.2.3" />
</ItemGroup>

El paquete al que se hace referencia debe estar disponible en una fuente NuGet, como NuGet.org, Azure Artifacts o un origen local. Cuando se hace referencia a un paquete que contiene reglas de análisis de código, las reglas se incluyen automáticamente en el proyecto sql y se evalúan cuando la propiedad RunSqlCodeAnalysis del proyecto se establece en true. Las reglas se pueden deshabilitar o escalar para que devuelvan un error de forma individual dentro de las propiedades del proyecto.