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) Versión preliminar
de la base de datos SQL de Azure SQL Database
deAzure SQL Managed Instance
en Microsoft Fabric
El vector tipo de datos está diseñado para almacenar datos vectoriales optimizados para operaciones como la búsqueda de similitud 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 .
Nota:
Para ver las limitaciones, consulte Limitaciones y problemas conocidos.
Las características de vector están disponibles en Instancia administrada de Azure SQL configuradas con la directiva Always-up-to-date .
Para obtener más información sobre cómo trabajar con datos vectoriales, consulte:
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]
Dimensiones
Un vector debe tener al menos una dimensión. El número máximo de dimensiones admitidas es 1998.
Ejemplos
A Definición de columnas
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.
CREATE TABLE dbo.vectors
(
id INT PRIMARY KEY,
v VECTOR(3) NOT NULL
);
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 VECTOR(3) = '[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 características
El nuevo tipo vector está disponible en todos los niveles de compatibilidad de la base de datos.
Conversiones
- 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.
Compatibilidad
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.
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 que se enumeran a continuación. 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
SqlVector
tipo, ampliandoSystem.Data.SqlDbTypes
. -
Microsoft JDBC Driver for SQL Server: versión Preview 13.1.0 introduce el
microsoft.sql.Types.VECTOR
tipo y lamicrosoft.sql.Vector
clase.
Nota:
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.
Importante
Requiere Microsoft.Data.SqlClient 6.1.0 o posterior para la compatibilidad con vectores nativos.
static void InsertNonNullVal(SqlConnection conn)
{
Console.WriteLine("Inserting non-null value with SqlDbType");
using SqlCommand command = new SqlCommand("INSERT INTO dbo.vectors VALUES (@Id, @VectorData)", conn);
command.Parameters.AddWithValue("@Id", 1);
var vectorParameter = new SqlParameter("@VectorData", Microsoft.Data.SqlDbTypeExtensions.Vector);
vectorParameter.Value = new Microsoft.Data.SqlTypes.SqlVectorFloat32(new float[] { 3.14159f, 1.61803f, 1.41421f });
command.Parameters.Add(vectorParameter);
command.ExecuteNonQuery();
}
static void ReadWithGetValue(SqlConnection connection)
{
Console.WriteLine("Reading values using GetValue method:");
using (SqlCommand commandSourceData = new SqlCommand("SELECT v FROM dbo.vectors;", connection))
using (SqlDataReader reader = commandSourceData.ExecuteReader())
while (reader.Read())
{
var vector = reader.GetValue(0);
if (vector != null && vector != DBNull.Value)
{
Console.WriteLine("Type: " + vector.GetType() + " Element Count: " + ((SqlVectorFloat32)vector).Length);
var values = ((SqlVectorFloat32)vector).Values;
Console.WriteLine("Values: " + string.Join(", ", values));
}
}
}
Nota:
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));
}
}
herramientas
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
Limitaciones
El tipo de vector tiene las siguientes limitaciones:
Tablas
- No se admiten restricciones de nivel de columna, excepto las
NULL
/NOT NULL
restricciones.-
DEFAULT
Las restricciones yCHECK
no se admiten para las columnas vectoriales . - Las restricciones de clave, como
PRIMARY KEY
oFOREIGN 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.
Índices
- 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_ledger
almacenado 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 TYPE
para 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.