Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: SQL Server 2025 (17.x)
Base de datos SQL de Azure SQL Database
deAzure SQL Managed Instance
en Microsoft Fabric
El tipo de datos de vector está diseñado para almacenar datos vectoriales optimizados para operaciones como la búsqueda de similitudes y las aplicaciones de aprendizaje automático. Los vectores se almacenan en un formato binario optimizado, pero se exponen como matrices JSON para mayor comodidad. Cada elemento del vector se almacena como un valor de punto flotante de precisión sencilla (4 bytes).
Para proporcionar una experiencia familiar para los desarrolladores, el tipo de datos vectorial se crea y se muestra como una matriz JSON. Por ejemplo, un vector con tres dimensiones se puede representar como '[0.1, 2, 30]'. La conversión implícita y explícita de y al tipo de vector se puede realizar mediante tipos varchar, nvarchar y json .
Note
SQL Server 2025 (17.x) admite vectores de precisión media (float16). Para obtener más información, consulte Compatibilidad con formato de punto flotante de media precisión en el tipo de dato vectorial.
float16 vector está actualmente disponible para vista previa. Para probarlo, habilite la PREVIEW_FEATURES opción de configuración con ámbito de base de datos. Para obtener más información, revise PREVIEW_FEATURES = { ON | OFF }.
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Para ver las limitaciones, consulte Limitaciones y problemas conocidos.
Note
Las características de vector están disponibles en Instancia Administrada de Azure SQL configurada con la directiva [Always-up-to-date](/azure/azure-sql/managed-instance/update-policy#always-up-to-date-update-policy).
Para obtener más información sobre cómo trabajar con datos vectoriales, consulte:
- Búsqueda de vectores e índices vectoriales en el motor de base de datos sql
- Aplicaciones inteligentes
Sintaxis de ejemplo
La sintaxis de uso del tipo vector es similar a todos los demás tipos de datos de SQL Server de una tabla.
column_name VECTOR ( { <dimensions> } ) [ NOT NULL | NULL ]
De forma predeterminada, el tipo base es float32. Para usar la precisión media, debe especificar float16 explícitamente.
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Dimensions
Un vector debe tener al menos una dimensión. El número máximo de dimensiones admitidas es 1998.
Examples
A. Definición de columna
El tipo vector se puede usar en la definición de columna contenida en una instrucción CREATE TABLE, por ejemplo:
En el ejemplo siguiente se crea una tabla con una columna vectorial y se insertan datos en ella.
Puede definir una columna vectorial en una tabla mediante el tipo base predeterminado (float32) o especificar float16 explícitamente para el almacenamiento de precisión media.
CREATE TABLE dbo.vectors
(
id INT PRIMARY KEY,
v VECTOR(3) NOT NULL -- Uses default base type (`float32`)
);
CREATE TABLE dbo.vectors
(
id INT PRIMARY KEY,
v VECTOR(3, float16) -- Uses float16 for reduced storage and precision
);
INSERT INTO dbo.vectors (id, v)
VALUES (1, '[0.1, 2, 30]'),
(2, '[-100.2, 0.123, 9.876]'),
(3, JSON_ARRAY(1.0, 2.0, 3.0)); -- Using JSON_ARRAY to create a vector
SELECT *
FROM dbo.vectors;
B. Uso en variables
En el ejemplo siguiente se declaran vectores mediante el nuevo tipo de datos vector y se calculan las distancias mediante la función VECTOR_DISTANCE.
El tipo vector se puede usar con variables:
DECLARE @v AS VECTOR(3) = '[0.1, 2, 30]';
SELECT @v;
DECLARE @v AS VECTOR(3, float16) = '[0.1, 2, 30]';
SELECT @v;
C. Uso en procedimientos almacenados o funciones
El tipo de datos vector se puede usar como parámetro en funciones o procedimientos almacenados. Por ejemplo:
CREATE PROCEDURE dbo.SampleStoredProcedure
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Disponibilidad de funcionalidades
El nuevo tipo vector está disponible en todos los niveles de compatibilidad de la base de datos.
La compatibilidad con float16 vectores está actualmente condicionada bajo la configuración de PREVIEW_FEATURES.
Debe habilitarla explícitamente antes de usar VECTOR(..., float16).
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Conversions
- El tipo vector no se puede usar con el tipo sql_variant ni asignarse a una variable o columna de sql_variant. Esta restricción es similar a los tipos de datos varchar(max), varbinary(max), nvarchar(max), xml, json y CLR.
Compatibility
Mejoras en el protocolo TDS
SQL Server almacena vectores en un formato binario optimizado, pero los expone como matrices JSON para mayor comodidad.
Los controladores admitidos usan mejoras en el protocolo TDS para transmitir datos vectoriales de forma más eficaz en formato binario y presentarlos a aplicaciones como tipos de vector nativos. Este enfoque reduce el tamaño de carga, elimina la sobrecarga del análisis de JSON y conserva la precisión de punto flotante completo. Como resultado, mejora tanto el rendimiento como la precisión al trabajar con vectores de alta dimensión en escenarios de inteligencia artificial y aprendizaje automático.
Note
float16 Los vectores se transmiten actualmente como varchar(max) (matriz JSON) a través de TDS. La compatibilidad con el transporte binario para float16 aún no está disponible en controladores como ODBC, JDBC y .NET.
Compatibilidad con controladores nativos
Las aplicaciones que usan TDS versión 7.4 o posterior y los controladores actualizados pueden leer, escribir, transmitir y copiar datos vectoriales de forma nativa.
Estas funcionalidades requieren versiones de los controladores siguientes. Asegúrese de que usa la versión correcta para habilitar la compatibilidad con vectores nativos.
-
Microsoft.Data.SqlClient: la versión 6.1.0 presenta el
SqlVectortipo, ampliandoSystem.Data.SqlDbTypes. -
Microsoft JDBC Driver for SQL Server: versión Preview 13.1.0 introduce el
microsoft.sql.Types.VECTORtipo y lamicrosoft.sql.Vectorclase.
Note
En el caso de los clientes que no admiten el protocolo TDS actualizado, SQL Server sigue exponiendo datos vectoriales como tipos varchar(max) para garantizar la compatibilidad con versiones anteriores. Las aplicaciones cliente pueden trabajar con datos vectoriales como si fuera una matriz JSON. El motor de base de datos de SQL convierte automáticamente los vectores a y desde una matriz JSON, haciendo que el nuevo tipo sea transparente para el cliente. Por lo tanto, los controladores y todos los idiomas son automáticamente compatibles con el nuevo tipo.
Puede empezar a usar el nuevo tipo de vector inmediatamente. En los ejemplos siguientes se muestran diferentes idiomas y configuraciones de controladores.
Important
Requiere Microsoft.Data.SqlClient 6.1.0 o posterior para la compatibilidad con vectores nativos.
using Microsoft.Data;
using Microsoft.Data.SqlClient;
using Microsoft.Data.SqlTypes;
namespace VectorSampleApp
{
class Program
{
// Set your environment variable or fallback to local server
private static readonly string connectionString =
Environment.GetEnvironmentVariable("CONNECTION_STR")
?? "Server=tcp:localhost,1433;Database=Demo2;Integrated Security=True;TrustServerCertificate=True";
private const int VectorDimensions = 3;
private const string TableName = "dbo.Vectors";
static void Main()
{
using var connection = new SqlConnection(connectionString);
connection.Open();
SetupTables(connection, TableName, VectorDimensions);
InsertVectorData(connection, TableName);
ReadVectorData(connection, TableName);
}
private static void SetupTables(SqlConnection connection, string tableName, int vectorDimensionCount)
{
using var command = connection.CreateCommand();
command.CommandText = $@"
IF OBJECT_ID('{tableName}', 'U') IS NOT NULL DROP TABLE {tableName};
IF OBJECT_ID('{tableName}Copy', 'U') IS NOT NULL DROP TABLE {tableName}Copy;";
command.ExecuteNonQuery();
command.CommandText = $@"
CREATE TABLE {tableName} (
Id INT IDENTITY(1,1) PRIMARY KEY,
VectorData VECTOR({vectorDimensionCount})
);
CREATE TABLE {tableName}Copy (
Id INT IDENTITY(1,1) PRIMARY KEY,
VectorData VECTOR({vectorDimensionCount})
);";
command.ExecuteNonQuery();
}
private static void InsertVectorData(SqlConnection connection, string tableName)
{
using var command = new SqlCommand($"INSERT INTO {tableName} (VectorData) VALUES (@VectorData)", connection);
var param = command.Parameters.Add("@VectorData", SqlDbTypeExtensions.Vector);
// Insert null using DBNull.Value
param.Value = DBNull.Value;
command.ExecuteNonQuery();
// Insert non-null vector
param.Value = new SqlVector<float>(new float[] { 3.14159f, 1.61803f, 1.41421f });
command.ExecuteNonQuery();
// Insert typed null vector
param.Value = SqlVector<float>.CreateNull(VectorDimensions);
command.ExecuteNonQuery();
// Prepare once and reuse for loop
command.Prepare();
for (int i = 0; i < 10; i++)
{
param.Value = new SqlVector<float>(new float[]
{
i + 0.1f,
i + 0.2f,
i + 0.3f
});
command.ExecuteNonQuery();
}
}
private static void ReadVectorData(SqlConnection connection, string tableName)
{
using var command = new SqlCommand($"SELECT VectorData FROM {tableName}", connection);
using var reader = command.ExecuteReader();
while (reader.Read())
{
var sqlVector = reader.GetSqlVector<float>(0);
Console.WriteLine($"Type: {sqlVector.GetType()}, IsNull: {sqlVector.IsNull}, Length: {sqlVector.Length}");
if (!sqlVector.IsNull)
{
float[] values = sqlVector.Memory.ToArray();
Console.WriteLine("VectorData: " + string.Join(", ", values));
}
else
{
Console.WriteLine("VectorData: NULL");
}
}
}
}
}
Note
Si no usa los controladores de .NET más recientes, todavía puede trabajar con datos vectoriales en C# serializando y deserializándolo como una cadena JSON mediante la JsonSerializer clase . Esto garantiza la compatibilidad con la varchar(max) representación de vectores expuestos por SQL Server para clientes anteriores.
using Microsoft.Data.SqlClient;
using Dapper;
using DotNetEnv;
using System.Text.Json;
namespace DotNetSqlClient;
class Program
{
static void Main(string[] args)
{
Env.Load();
var v1 = new float[] { 1.0f, 2.0f, 3.0f };
using var conn = new SqlConnection(Env.GetString("MSSQL"));
conn.Execute("INSERT INTO dbo.vectors VALUES(100, @v)", param: new {@v = JsonSerializer.Serialize(v1)});
var r = conn.ExecuteScalar<string>("SELECT v FROM dbo.vectors") ?? "[]";
var v2 = JsonSerializer.Deserialize<float[]>(r);
Console.WriteLine(JsonSerializer.Serialize(v2));
}
}
Tools
Las siguientes herramientas admiten el tipo de datos vectorial :
- SQL Server Management Studio versión 21 y versiones posteriores
- DacFX y SqlPackage versión 162.5 (noviembre de 2024) y versiones posteriores
- La extensión de SQL Server para Visual Studio Code versión 1.32 (mayo de 2025) y versiones posteriores
- Microsoft.Build.Sql versión 1.0.0 (marzo de 2025) y versiones posteriores
- SQL Server Data Tools (Visual Studio 2022) versión 17.13 y versiones posteriores
Limitations
El tipo de vector tiene las siguientes limitaciones:
Tables
No se admiten restricciones de nivel de columna, excepto las
NULL/NOT NULLrestricciones.Las restricciones
DEFAULTyCHECKno se admiten para las columnas de vector.Las restricciones de clave, como
PRIMARY KEYoFOREIGN KEY, no se admiten para las columnas vectoriales . La igualdad, la unicidad, las combinaciones mediante columnas vectoriales como claves y los pedidos de ordenación no se aplican a los tipos de datos vectoriales .No hay ninguna noción de unicidad para los vectores, por lo que las restricciones únicas no son aplicables.
La comprobación del intervalo de valores dentro de un vector tampoco es aplicable.
Los vectores no admiten la comparación, suma, resta, multiplicación, división, concatenación ni ningún otro operador de asignación matemático, lógico y compuesto.
Las columnas vectoriales no se pueden usar en tablas optimizadas para memoria.
Indexes
- No se permiten índices de árbol B ni índices de almacén de columnas en columnas vectoriales . Sin embargo, una columna de vector se puede especificar como una columna incluida en una definición de índice.
Metadatos del esquema de tabla
- El procedimiento almacenado del sistema sp_describe_first_result_set no devuelve correctamente el tipo de datos vector. Por lo tanto, muchos clientes y controladores de acceso a datos ven un tipo de datos varchar o nvarchar.
Tablas de libro de contabilidad
- El procedimiento
sp_verify_database_ledgeralmacenado genera un error si la base de datos contiene una tabla con una columna vectorial .
Tipos definidos por el usuario
- No se permite la creación de tipo de alias mediante
CREATE TYPEpara el tipo de vector, similar al comportamiento de los tipos de datos xml y json.
Siempre Cifrado
- El tipo vector no se admite con la funcionalidad Always Encrypted.
Problemas conocidos
- Actualmente, el enmascaramiento de datos muestra los datos vectoriales como tipo de datos varbinary en el portal de Azure.