Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Het vectordatatype slaat vectorgegevens op die geoptimaliseerd zijn voor operaties zoals similarity search en machine learning-toepassingen. Vectoren worden opgeslagen in een geoptimaliseerde binaire indeling, maar worden voor het gemak weergegeven als JSON-matrices. Elk element van de vector wordt opgeslagen als een drijvende-kommawaarde met enkelvoudige precisie (4 bytes).
Voor een vertrouwde ervaring voor ontwikkelaars wordt het vectorgegevenstype gemaakt en weergegeven als een JSON-matrix. Een vector met drie dimensies kan bijvoorbeeld worden weergegeven als '[0.1, 2, 30]'. Je kunt impliciet en expliciet converteren tussen het vectortype en varchar-, nvarchar- en json-types .
Zie voor meer informatie over het werken met vectorgegevens:
Voorbeeldsyntaxis
De gebruiksyntaxis voor het vectortype is vergelijkbaar met alle andere SQL Server-gegevenstypen in een tabel.
column_name VECTOR ( { <dimensions> } ) [ NOT NULL | NULL ]
Standaard is het basistype float32. Om halfprecisie te gebruiken, specificeer expliciet float16 .
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Dimensions
Een vector moet ten minste één dimensie hebben. Het maximale aantal dimensies hangt af van het type vectorbasis:
- float32 ondersteunt tot 1.998 dimensies.
- float16 ondersteunt tot 3.996 dimensies.
Beschikbaarheid van functies
Het vectordatatype is beschikbaar onder alle databasecompatibiliteitsniveaus. Als je geen basistype specificeert, gebruikt de vector float32.
Vectorfuncties zijn beschikbaar in Azure SQL Managed Instance dat is geconfigureerd met het beleid Always-up-to-date .
Vectoren met halve precisie (float16)
Half-precision (float16) vectoren zijn over het algemeen beschikbaar in Azure SQL Database, Azure SQL Managed Instance en SQL database in Microsoft Fabric. Er is geen previewconfiguratie vereist.
In SQL Server 2025 (17.x) zijn half-precision (float16) vectoren beschikbaar in de preview. Om float16 te gebruiken in SQL Server 2025, moet je de
PREVIEW_FEATURESoptie voor databasescoped configuratie inschakelen. Voor meer informatie, zie Voorbeeldfuncties inschakelen in SQL Server 2025.
Raadpleeg voor meer informatie over half-precisievectoren Ondersteuning voor half-precision floats in het vectordatatype.
Schakel previewfuncties in SQL Server 2025 in
Voor sommige previewfuncties in SQL Server 2025 moet je de PREVIEW_FEATURES configuratieoptie voor databasescoped inschakelen.
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Voor meer informatie, zie PREVIEW_FEATURES.
Examples
A. Kolomdefinitie
Gebruik het vectortype in kolomdefinities binnen een CREATE TABLE statement. Voorbeeld:
In het volgende voorbeeld wordt een tabel met een vectorkolom gemaakt en worden er gegevens in ingevoegd.
Definieer een vectorkolom in een tabel door het standaard basistype float32 of float16 te gebruiken voor half-nauwkeurige opslag.
CREATE TABLE dbo.vectors
(
id INT PRIMARY KEY,
v VECTOR(3) NOT NULL -- Uses default base type (**float32**)
);
CREATE TABLE dbo.vectors_fp16
(
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. Gebruik in variabelen
Het volgende voorbeeld declareert vectoren met behulp van het nieuwe vectordatatype en berekent afstanden met behulp van de VECTOR_DISTANCE functie.
Gebruik het vectortype met variabelen:
DECLARE @v AS VECTOR(3) = '[0.1, 2, 30]';
SELECT @v;
GO
DECLARE @v AS VECTOR(3, float16) = '[0.1, 2, 30]';
SELECT @v;
C. Gebruik in opgeslagen procedures of functies
Je kunt het vectordatatype als parameter gebruiken in opgeslagen procedures of functies. Voorbeeld:
CREATE PROCEDURE dbo.SampleStoredProcedure
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Conversions
- Je kunt het vectortype niet gebruiken met het sql_variant type of het toewijzen aan een sql_variant variabele of kolom. Deze beperking is vergelijkbaar met varchar(max), varbinary(max), nvarchar(max), xml, json en CLR-gegevenstypen.
Compatibility
Verbeteringen aan het TDS-protocol
SQL Server slaat vectoren op in een geoptimaliseerde binaire indeling, maar maakt ze beschikbaar als JSON-matrices voor het gemak.
Ondersteunde stuurprogramma's gebruiken verbeteringen in het TDS-protocol om vectorgegevens efficiënter in binaire indeling te verzenden en deze als systeemeigen vectortypen aan toepassingen te presenteren. Deze aanpak vermindert de payloadgrootte, elimineert de overhead van JSON-parsering en behoudt volle floating-point precisie. Hierdoor worden zowel de prestaties als de nauwkeurigheid verbeterd bij het werken met high-dimensionale vectoren in AI- en machine learning-scenario's.
Ondersteuning voor systeemeigen stuurprogramma's
Toepassingen die gebruikmaken van TDS versie 7.4 of hoger en bijgewerkte stuurprogramma's kunnen systeemeigen vectorgegevens lezen, schrijven, streamen en bulksgewijs kopiëren.
Voor deze mogelijkheden zijn versies van de volgende stuurprogramma's vereist. Zorg ervoor dat u de juiste versie gebruikt om systeemeigen vectorondersteuning in te schakelen.
-
Microsoft.Data.SqlClient: versie 6.1.0 introduceert het
SqlVectortype uitbreidingSystem.Data.SqlDbTypes. -
Microsoft JDBC-stuurprogramma voor SQL Server: versie 13.1.0 Preview introduceert het
microsoft.sql.Types.VECTORtype en demicrosoft.sql.Vectorklasse.
Note
Native binair transport voor float16-vectoren wordt ondersteund in Microsoft JDBC Driver 13.4 voor SQL Server en Microsoft ODBC Driver 18.7.1 voor SQL Server. Deze drivers serialiseren en deserialiseren half-precisie vectorwaarden met behulp van het native wire-formaat, waardoor de netwerkpayload wordt verminderd ten opzichte van de JSON-representatie.
Gebruik deze driverversies of hoger voor native float16-overdracht. Drivers die geen native float16-transport ondersteunen, kunnen blijven werken met vectoren die als varchar(max) JSON-arrays worden weergegeven.
Note
Voor clients die het bijgewerkte TDS-protocol niet ondersteunen, blijft SQL Server vectorgegevens beschikbaar maken als varchar(max) -typen om compatibiliteit met eerdere versies te garanderen. Clienttoepassingen kunnen werken met vectorgegevens alsof het een JSON-matrix is. De SQL Database Engine converteert automatisch vectoren van en naar een JSON-matrix, waardoor het nieuwe type transparant is voor de client. Daarom zijn stuurprogramma's en alle talen automatisch compatibel met het nieuwe type.
U kunt het nieuwe vectortype meteen gaan gebruiken. In de volgende voorbeelden ziet u verschillende talen en stuurprogrammaconfiguraties.
Important
Hiervoor is Microsoft.Data.SqlClient 6.1.0 of hoger vereist voor systeemeigen vectorondersteuning.
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
Als je niet de nieuwste .NET-drivers gebruikt, kun je nog steeds met vectordata in C# werken door het te serialiseren en te deserialiseren als een JSON-string met behulp van de JsonSerializer klasse. Deze aanpak zorgt voor compatibiliteit met de varchar(max)-weergave van vectoren die SQL Server beschikbaar stelt voor oudere clients.
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
De volgende hulpprogramma's ondersteunen het gegevenstype vector :
- SQL Server Management Studio versie 21 en nieuwere versies
- DacFX en SqlPackage versie 162.5 (november 2024) en latere versies
- De SQL Server-extensie voor Visual Studio Code versie 1.32 (mei 2025) en nieuwere versies
- Microsoft.Build.Sql versie 1.0.0 (maart 2025) en nieuwere versies
- SQL Server Data Tools (Visual Studio 2022) versie 17.13 en nieuwere versies
Limitations
Het vectortype heeft de volgende beperkingen:
Tables
Beperkingen op kolomniveau worden niet ondersteund, behalve de beperkingen
NOT NULLenNULL.DEFAULTenCHECKbeperkingen worden niet ondersteund voor vectorkolommen .Belangrijke beperkingen, zoals
PRIMARY KEYofFOREIGN KEY, worden niet ondersteund voor vectorkolommen . Gelijkheid, uniekheid, joins met behulp van vectorkolommen als sleutels en sorteervolgordes zijn niet van toepassing op vectorgegevenstypen .Er is geen idee van uniekheid voor vectoren, dus unieke beperkingen zijn niet van toepassing.
Het controleren van het bereik van waarden binnen een vector is niet van toepassing.
Vectoren bieden geen ondersteuning voor vergelijkingen, optellen, aftrekken, vermenigvuldigen, delen, samenvoegen of andere rekenkundige, logische en samengestelde toewijzingsoperatoren.
Je kunt geen vectorkolommen gebruiken in geheugengeoptimaliseerde tabellen.
Indexes
- Je kunt geen B-boomindexen of kolomopslagindexen gebruiken op vectorkolommen . Je kunt echter ook een vectorkolom opnemen als een opgenomen kolom in een indexdefinitie.
- Vectorindexen creëren een benaderende index op een vectorkolom om de prestaties van de zoekopdracht bij dichtstbijzijnde buren te verbeteren. Voor meer informatie over hoe vectorindexering en vectorzoekopdracht werken, en de verschillen tussen exacte en benaderende zoek, zie Vector search en vectorindexen in de SQL Database Engine.
Metagegevens van tabelschema
- De sp_describe_first_result_set systeemopslagprocedure geeft het vectordatatype niet correct terug. Als gevolg hiervan zien veel clients en stuurprogramma's voor gegevenstoegang het gegevenstype varchar of nvarchar.
Grootboektabellen
- De opgeslagen procedure
sp_verify_database_ledgergenereert een fout als de database een tabel met een vectorkolom bevat.
Door de gebruiker gedefinieerde typen
- Je kunt geen aliastype maken met
CREATE TYPEvoor het type vector. Deze beperking lijkt op het gedrag van de xml - en json-datatypes .
Altijd versleuteld
- Het vectortype wordt niet ondersteund met de Always Encrypted functie.
Bekende problemen
- Gegevensmaskering toont momenteel vectorgegevens als varbinair gegevenstype in Azure Portal.