Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database i Microsoft Fabric
Vektordatatypen lagrar vektordata optimerad för operationer som likhetssökning och maskininlärningsapplikationer. Vektorer lagras i ett optimerat binärt format men exponeras som JSON-matriser för enkelhetens skull. Varje element i vektorn lagras som ett flyttal med enkel precision (4 byte).
För att ge utvecklare en välbekant upplevelse skapas och visas vektordatatypen som en JSON-matris. Till exempel kan en vektor med tre dimensioner representeras som '[0.1, 2, 30]'. Du kan implicit och explicit konvertera mellan vektortypen och varchar-, nvarchar- och json-typerna .
Mer information om hur du arbetar med vektordata finns i:
Exempelsyntax
Användningssyntaxen för vektortypen liknar alla andra SQL Server-datatyper i en tabell.
column_name VECTOR ( { <dimensions> } ) [ NOT NULL | NULL ]
Som standard är bastypen float32. För att använda halvprecision, ange float16 explicit.
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Dimensions
En vektor måste ha minst en dimension. Det maximala antalet dimensioner beror på vektorbastypen:
- float32 stödjer upp till 1 998 dimensioner.
- float16 stöder upp till 3 996 dimensioner.
Tillgänglighet av funktioner
Vektordatatypen finns tillgänglig under alla databaskompatibilitetsnivåer. Om du inte specificerar en bastyp använder vektorn float32.
Vektorfunktioner är tillgängliga i Azure SQL Managed Instance som konfigurerats med principen Always-up-to-date .
Vektorer med halvprecision i float16-format
Halvprecisionvektorer (float16) finns generellt tillgängliga i Azure SQL Database, Azure SQL Managed Instance och SQL database i Microsoft Fabric. Ingen förhandsvisningskonfiguration krävs.
I SQL Server 2025 (17.x) finns halvprecisionsvektorer (float16) tillgängliga i förhandsvisning. För att använda float16 i SQL Server 2025 måste du aktivera konfigurationsalternativet
PREVIEW_FEATURESför databasens scoped. För mer information, se Aktivera förhandsgranskningsfunktioner i SQL Server 2025.
För mer information om halvprecisionsvektorer, se Halvprecisionsflottörstöd i vektordatatypen.
Aktivera förhandsgranskningsfunktioner i SQL Server 2025
För vissa förhandsvisningsfunktioner i SQL Server 2025 måste du aktivera konfigurationsalternativet för PREVIEW_FEATURES databasomfattning.
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
För mer information, se PREVIEW_FEATURES.
Examples
A. Kolumndefinition
Använd vektortypen i kolumndefinitioner inom en CREATE TABLE sats. Till exempel:
I följande exempel skapas en tabell med en vektorkolumn och data infogas i den.
Definiera en vektorkolumn i en tabell genom att använda antingen standardbastypen float32 eller float16 för halvprecisionslagring.
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. Användning i variabler
Följande exempel deklarerar vektorer genom att använda den nya vektordatatypen och beräknar avstånd med hjälp av VECTOR_DISTANCE funktionen.
Använd vektortypen med variabler:
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. Användning i lagrade procedurer eller funktioner
Du kan använda vektordatatypen som parameter i lagrade procedurer eller funktioner. Till exempel:
CREATE PROCEDURE dbo.SampleStoredProcedure
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Conversions
- Du kan inte använda vektortypen med sql_variant typen eller tilldela den till en sql_variant variabel eller kolumn. Den här begränsningen liknar varchar(max), varbinary(max), nvarchar(max), xml, json och CLR-baserade datatyper.
Compatibility
Förbättringar av TDS-protokollet
SQL Server lagrar vektorer i ett optimerat binärt format men exponerar dem som JSON-matriser för enkelhetens skull.
Drivrutiner som stöds använder förbättringar av TDS-protokollet för att överföra vektordata mer effektivt i binärt format och presentera dem för program som inbyggda vektortyper. Den här metoden minskar storleken på nyttolasten, eliminerar överheaden vid JSON-parsning och bevarar full flyttalsprecision. Därför förbättras både prestanda och noggrannhet när du arbetar med högdimensionella vektorer i AI- och maskininlärningsscenarier.
Stöd för intern drivrutin
Program som använder TDS version 7.4 eller senare och uppdaterade drivrutiner kan läsa, skriva, strömma och masskopiera vektordata internt.
Dessa funktioner kräver versioner av följande drivrutiner. Se till att du använder rätt version för att aktivera inbyggt vektorstöd.
-
Microsoft.Data.SqlClient: Version 6.1.0 introducerar
SqlVectortypen och utökarSystem.Data.SqlDbTypes. -
Microsoft JDBC-drivrutin för SQL Server: Version 13.1.0 Preview introducerar
microsoft.sql.Types.VECTORtyp ochmicrosoft.sql.Vectorklass.
Note
Inbyggd binär transport för float16-vektorer stöds i Microsoft JDBC Driver 13.4 för SQL Server och Microsoft ODBC Driver 18.7.1 för SQL Server. Dessa drivrutiner serialiserar och deserialiserar halvprecisionsvektorvärden med hjälp av det inbyggda trådformatet, vilket minskar nätverkslasten jämfört med JSON-representationen.
Använd dessa drivrutinsversioner eller senare för native float16-transport . Drivrutiner som inte stödjer nativ float16-transport kan fortsätta arbeta med vektorer representerade som varchar(max) JSON-arrayer.
Note
För klienter som inte stöder det uppdaterade TDS-protokollet fortsätter SQL Server att exponera vektordata som varchar(max) typer för att säkerställa bakåtkompatibilitet. Klientprogram kan fungera med vektordata som om det vore en JSON-matris. SQL Database Engine konverterar automatiskt vektorer till och från en JSON-matris, vilket gör den nya typen transparent för klienten. Därför är drivrutiner och alla språk automatiskt kompatibla med den nya typen.
Du kan börja använda den nya vektortypen direkt. I följande exempel visas olika språk och drivrutinskonfigurationer.
Important
Kräver Microsoft.Data.SqlClient 6.1.0 eller senare för inbyggt vektorstöd.
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
Om du inte använder de senaste .NET-drivrutinerna kan du fortfarande arbeta med vektordata i C# genom att serialisera och deserialisera den som en JSON-sträng med hjälp av klassenJsonSerializer. Denna metod säkerställer kompatibilitet med varchar(max) representationen av vektorer som SQL Server exponerar för äldre klienter.
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
Följande verktyg stöder vektordatatypen :
- SQL Server Management Studio version 21 och senare versioner
- DacFX och SqlPackage version 162.5 (november 2024) och senare versioner
- SQL Server-tillägget för Visual Studio Code version 1.32 (maj 2025) och senare versioner
- Microsoft.Build.Sql version 1.0.0 (mars 2025) och senare versioner
- SQL Server Data Tools (Visual Studio 2022) version 17.13 och senare versioner
Limitations
Vektortypen har följande begränsningar:
Tables
Kolumnnivåbegränsningar stöds inte, förutom
NULLochNOT NULLbegränsningar.DEFAULTochCHECKbegränsningar stöds inte för vektorkolumner .Viktiga begränsningar, till exempel
PRIMARY KEYellerFOREIGN KEY, stöds inte för vektorkolumner . Likhet, unikhet, kopplingar med vektorkolumner som nycklar och sorteringsordningar gäller inte för vektordatatyper .Det finns ingen uppfattning om unikhet för vektorer, så unika begränsningar är inte tillämpliga.
Att kontrollera värdeintervallet inom en vektor är inte tillämpligt.
Vektorer stöder inte jämförelse, addition, subtraktion, multiplikation, division, sammanfogning eller andra matematiska, logiska och sammansatta tilldelningsoperatorer.
Du kan inte använda vektorkolumner i minnesoptimerade tabeller.
Indexes
- Du kan inte använda B-trädindex eller kolumnlagringsindex på vektorkolumner . Du kan dock inkludera en vektorkolumn som inkluderad kolumn i en indexdefinition.
- Vektorindex skapar ett ungefärligt index på en vektorkolumn för att förbättra prestandan vid närmaste granne-sökning. För att lära dig mer om hur vektorindexering och vektorsökning fungerar, samt skillnaderna mellan exakt och approximativ sökning, se Vektorsökning och vektorindex i SQL Database Engine.
Metadata för tabellschema
- Den sp_describe_first_result_set systemlagrade proceduren returnerar inte vektordatatypen korrekt. Som ett resultat ser många dataåtkomstklienter och drivrutiner en varchar - eller nvarchar-datatyp .
Transaktionsregistertabeller
- Den lagrade proceduren
sp_verify_database_ledgergenererar ett fel om databasen innehåller en tabell med en vektorkolumn .
Användardefinierade typer
- Du kan inte skapa en aliastyp med hjälp av
CREATE TYPEför typen vector. Denna begränsning liknar beteendet hos xml - och json-datatyperna .
Alltid Krypterad
- Vektortypen stöds inte med funktionen Alltid krypterad.
Kända problemområden
- Datamaskering visar för närvarande vektordata som varbinär datatyp i Azure-portalen.