Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2025 (17.x)
Banco de Dados
SQL do AzureBanco de DadosSQL do Azure Banco de Dados SQL banco de dados SQL do Banco de Dados SQL do Azure
banco de dados SQL no Microsoft Fabric
O tipo de dados de vetor foi criado para armazenar dados de vetor otimizados para operações como a pesquisa de similaridade e aplicativos de aprendizado de máquina. Os vetores são armazenados em um formato binário otimizado, mas são expostos como matrizes JSON para conveniência. Cada elemento do vetor é armazenado como um valor de ponto flutuante de precisão simples (4 bytes).
Para fornecer uma experiência familiar para desenvolvedores, o tipo de dados de vetor é criado e exibido como uma matriz JSON. Por exemplo, um vetor com três dimensões pode ser representado como '[0.1, 2, 30]'. A conversão implícita e explícita de e para o tipo de vetor pode ser feita usando os tipos varchar, nvarchar e json .
Note
O SQL Server 2025 (17.x) dá suporte a vetores de meia precisão (float16). Para obter mais informações, consulte Suporte a float de meia precisão no tipo de dados de vetor.
float16 no momento, o vetor está disponível para visualização. Para testar, habilite a opção de configuração de escopo de banco de dados PREVIEW_FEATURES. Para obter detalhes, examine PREVIEW_FEATURES = { ON | OFF }.
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Para limitações, examine limitações e problemas conhecidos.
Note
Os recursos de vetor estão disponíveis na Instância Gerenciada de SQL do Azure configurada com a política [Always-up-to-date](/azure/azure-sql/managed-instance/ update-policy#always-up-to-date-update-policy).
Para obter mais informações sobre como trabalhar com dados de vetor, consulte:
Sintaxe de exemplo
A sintaxe de uso para o tipo de vetor é semelhante a todos os outros tipos de dados do SQL Server em uma tabela.
column_name VECTOR ( { <dimensions> } ) [ NOT NULL | NULL ]
Por padrão, o tipo base é float32. Para usar a meia precisão, você precisa especificar float16 explicitamente.
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Dimensions
Um vetor deve ter pelo menos uma dimensão. O número máximo de dimensões com suporte é 1998.
Examples
A. Definição de coluna
O tipo de vetor pode ser usado na definição de coluna contida em uma instrução CREATE TABLE, por exemplo:
O exemplo a seguir cria uma tabela com uma coluna de vetor e insere dados nela.
Você pode definir uma coluna de vetor em uma tabela usando o tipo base padrão (float32) ou especificar float16 explicitamente para armazenamento de meia precisão.
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 em variáveis
O exemplo a seguir declara vetores usando o novo tipo de dados de vetor e calcula distâncias usando a função VECTOR_DISTANCE.
O tipo de vetor pode ser usado com variáveis:
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 em funções ou procedimentos armazenados
O tipo de dados de vetor pode ser usado como parâmetro em funções ou procedimentos armazenados. Por exemplo:
CREATE PROCEDURE dbo.SampleStoredProcedure
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Disponibilidade de funcionalidades
O novo tipo de vetor está disponível em todos os níveis de compatibilidade do banco de dados.
O suporte para float16 vetores está atualmente fechado na PREVIEW_FEATURES configuração.
Você deve habilitá-lo explicitamente antes de usar VECTOR(..., float16).
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Conversions
- O tipo de vetor não pode ser usado com o tipo sql_variant ou atribuído a uma variável ou coluna de sql_variant. Essa restrição é semelhante a varchar(max), varbinary(max), nvarchar(max), xml, json e tipos de dados baseados em CLR.
Compatibility
Aprimoramentos no protocolo TDS
O SQL Server armazena vetores em um formato binário otimizado, mas os expõe como matrizes JSON para conveniência.
Os drivers com suporte usam aprimoramentos no protocolo TDS para transmitir dados de vetor com mais eficiência no formato binário e apresentá-los a aplicativos como tipos de vetor nativos. Essa abordagem reduz o tamanho da carga, elimina a sobrecarga da análise JSON e preserva a precisão total do ponto flutuante. Como resultado, ele melhora o desempenho e a precisão ao trabalhar com vetores de alta dimensão em cenários de IA e machine learning.
Note
float16 Atualmente, os vetores são transmitidos como varchar(max) (matriz JSON) por TDS. O suporte de transporte binário para float16 ainda não está disponível em drivers como ODBC, JDBC e .NET.
Suporte a driver nativo
Os aplicativos que usam os drivers TDS versão 7.4 ou superior e atualizados podem ler, gravar, transmitir e copiar dados de vetor em massa nativamente.
Esses recursos exigem versões específicas dos drivers a seguir. Verifique se você está usando a versão correta para habilitar o suporte a vetores nativos.
-
Microsoft.Data.SqlClient: a versão 6.1.0 apresenta o
SqlVectortipo, estendendoSystem.Data.SqlDbTypes. -
Microsoft JDBC Driver para SQL Server: a versão 13.1.0 Preview apresenta o
microsoft.sql.Types.VECTORtipo e amicrosoft.sql.Vectorclasse.
Note
Para clientes que não dão suporte ao protocolo TDS atualizado, o SQL Server continua a expor dados de vetor como tipos varchar(max) para garantir a compatibilidade com versões anteriores. Os aplicativos cliente podem trabalhar com dados de vetor como se fossem uma matriz JSON. O Mecanismo de Banco de Dados SQL converte automaticamente vetores de e para uma matriz JSON, tornando o novo tipo transparente para o cliente. Portanto, os drivers e todos os idiomas são automaticamente compatíveis com o novo tipo.
Você pode começar a usar o novo tipo de vetor imediatamente. Os exemplos a seguir mostram diferentes idiomas e configurações de driver.
Important
Requer Microsoft.Data.SqlClient 6.1.0 ou posterior para suporte a vetor nativo.
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
Se você não estiver usando os drivers .NET mais recentes, ainda poderá trabalhar com dados de vetor em C# serializando e desserializando-os como uma cadeia de caracteres JSON usando a JsonSerializer classe. Isso garante a compatibilidade com a varchar(max) representação de vetores expostos pelo SQL Server para clientes mais antigos.
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
As seguintes ferramentas dão suporte ao tipo de dados de vetor :
- SQL Server Management Studio versão 21 e versões posteriores
- DacFX e SqlPackage versão 162.5 (novembro de 2024) e versões posteriores
- A extensão do SQL Server para Visual Studio Code versão 1.32 (maio de 2025) e versões posteriores
- Microsoft.Build.Sql versão 1.0.0 (março de 2025) e versões posteriores
- SQL Server Data Tools (Visual Studio 2022) versão 17.13 e versões posteriores
Limitations
O tipo de vetor tem as seguintes limitações:
Tables
Não há suporte para restrições no nível de coluna, exceto para
NULL/NOT NULLrestrições.DEFAULTeCHECKrestrições não são suportadas para colunas de vetor.Restrições de chave, como
PRIMARY KEYouFOREIGN KEY, não têm suporte para colunas de vetor . Igualdade, exclusividade, junções usando colunas de vetor como chaves e ordens de classificação não se aplicam a tipos de dados de vetor .Não há noção de exclusividade para vetores, portanto, restrições exclusivas não são aplicáveis.
A verificação do intervalo de valores em um vetor também não é aplicável.
Os vetores não dão suporte a comparação, adição, subtração, multiplicação, divisão, concatenação ou qualquer outro operador matemático, lógico e de atribuição composta.
Colunas vetoriais não podem ser usadas em tabelas com otimização de memória.
Indexes
- Índices de árvore b ou índices columnstore não são permitidos em colunas de vetor. No entanto, uma coluna de vetor pode ser especificada como uma coluna incluída em uma definição de índice.
Metadados do esquema de tabela
- O procedimento armazenado do sistema sp_describe_first_result_set não retorna corretamente o tipo de dados de vetor. Portanto, muitos clientes de acesso a dados e driver exibem um tipo de dados varchar ou nvarchar.
Tabelas do razão contábil
- O procedimento
sp_verify_database_ledgerarmazenado gerará um erro se o banco de dados contiver uma tabela com uma coluna de vetor .
Tipos definidos pelo usuário
- A criação do tipo de alias usando
CREATE TYPEpara o tipo de vetor não é permitida, semelhante ao comportamento dos tipos de dados xml e json.
Sempre Criptografado
- Não há suporte para o tipo de vetor com o recurso Always Encrypted.
Problemas conhecidos
- A máscara de dados atualmente mostra dados de vetor como tipo de dados varbinary no portal do Azure.