Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL database v Microsoft Fabric
Vektorový datový typ ukládá vektorová data optimalizovaná pro operace, jako je vyhledávání podobnosti a aplikace strojového učení. Vektory jsou uloženy v optimalizovaném binárním formátu, ale jsou zpřístupněny jako pole JSON pro usnadnění. Každý prvek vektoru je uložen jako číslo v plovoucí řádové čárce s jednoduchou přesností (4 bajty).
Pokud chcete vývojářům poskytnout známé prostředí, vytvoří se datový typ vektoru a zobrazí se jako pole JSON. Například vektor se třemi rozměry může být reprezentován jako '[0.1, 2, 30]'. Můžete implicitně i explicitně převádět mezi typem vektoru a typy varchar, nvarchar a json .
Další informace o práci s vektorovými daty najdete tady:
Ukázková syntaxe
Syntaxe použití pro typ vektoru je podobná všem ostatním datovým typům SQL Serveru v tabulce.
column_name VECTOR ( { <dimensions> } ) [ NOT NULL | NULL ]
Výchozím nastavením je typ základny float32. Pro použití poloviční přesnosti specifikujte float16 explicitně.
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Dimensions
Vektor musí mít alespoň jednu dimenzi. Maximální počet rozměrů závisí na typu vektorové báze:
- Float32 podporuje až 1 998 dimenzí.
- Float16 podporuje až 3 996 dimenzí.
Dostupnost funkcí
Vektorový datový typ je dostupný ve všech úrovních kompatibility databáze. Pokud nespecifikujete základní typ, vektor použije float32.
Funkce vektorů jsou dostupné ve službě Azure SQL Managed Instance nakonfigurované pomocí zásad Always-up-to-date .
Vektory float16 s polopřesností
Vektory s poloviční přesností (float16) jsou obecně dostupné v Azure SQL Database, Azure SQL Managed Instance a SQL databázích v Microsoft Fabric. Není potřeba žádná preview konfigurace.
V SQL Server 2025 (17.x) jsou v náhledu dostupné vektory s poloviční přesností (float16). Pro použití float16 v SQL Server 2025 musíte povolit
PREVIEW_FEATURESmožnost konfigurace s omezeným rozsahem databáze. Pro více informací viz Povolit funkce náhledu v SQL Server 2025.
Pro více informací o vektorech s poloviční přesností viz Podpora plovoucích pohybů s poloviční přesností v datovém typu vektorů.
Povolte funkce náhledu v SQL Server 2025
Pro některé náhledové funkce v SQL Server 2025 musíte povolit PREVIEW_FEATURES možnost konfigurace s omezeným rozsahem databáze.
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Pro více informací viz PREVIEW_FEATURES.
Examples
A. Definice sloupce
Použijte vektorový typ v definicích sloupců v rámci příkazu CREATE TABLE . Například:
Následující příklad vytvoří tabulku s vektorovým sloupcem a vloží do ní data.
Definujte vektorový sloupec v tabulce použitím výchozího typu float32 nebo float16 pro poloviční přesnost.
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. Použití v proměnných
Následující příklad deklaruje vektory pomocí nového vektorového datového typu a vypočítává vzdálenosti pomocí VECTOR_DISTANCE funkce.
Použijte vektorový typ s proměnnými:
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. Použití v uložených procedurách nebo funkcích
Vektorový datový typ můžete použít jako parametr v uložených procedurách nebo funkcích. Například:
CREATE PROCEDURE dbo.SampleStoredProcedure
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Conversions
- Nemůžete použít vektorový typ s typem sql_variant ani ho přiřadit k sql_variant proměnné či sloupci. Toto omezení se podobá varchar(max), varbinary(max), nvarchar(max), xml, json a datovým typům založeným na CLR.
Compatibility
Vylepšení protokolu TDS
SQL Server ukládá vektory v optimalizovaném binárním formátu, ale zpřístupňuje je jako pole JSON pro usnadnění.
Podporované ovladače používají vylepšení protokolu TDS k efektivnějšímu přenosu vektorových dat v binárním formátu a jejich prezentaci aplikacím jako nativních typů vektorů. Tento přístup snižuje velikost datové části, eliminuje režii analýzy JSON a zachovává plnou přesnost s plovoucí desetinnou čárkou. Výsledkem je zlepšení výkonu a přesnosti při práci s vysoce dimenzionálními vektory ve scénářích umělé inteligence a strojového učení.
Podpora nativních ovladačů
Aplikace využívající TDS verze 7.4 nebo vyšší a aktualizované ovladače můžou nativně číst, zapisovat, streamovat a hromadně kopírovat vektorová data.
Tyto funkce vyžadují verze následujících ovladačů. Ujistěte se, že k povolení podpory nativních vektorů používáte správnou verzi.
-
Microsoft.Data.SqlClient: Verze 6.1.0 zavádí typ
SqlVector, který rozšiřujeSystem.Data.SqlDbTypes. -
Ovladač Microsoft JDBC pro SQL Server: Verze 13.1.0 Preview představuje
microsoft.sql.Types.VECTORtyp amicrosoft.sql.Vectortřídu.
Note
Nativní binární transport pro float16 vektory je podporován v Microsoft JDBC Driver 13.4 pro SQL Server a Microsoft ODBC Driver 18.7.1 pro SQL Server. Tyto ovladače serializují a deserializují vektorové hodnoty s polopřesností pomocí nativního wire formátu, čímž snižují síťový payload ve srovnání s reprezentací JSON.
Použijte tyto verze ovladačů nebo novější pro nativní přenos float16. Ovladače, které nepodporují nativní float16 transport, mohou pokračovat ve spolupráci s vektory reprezentovanými jako varchar(max) JSON pole.
Note
U klientů, kteří nepodporují aktualizovaný protokol TDS, SQL Server nadále zveřejňuje vektorová data jako typy varchar(max), aby se zajistila zpětná kompatibilita. Klientské aplikace můžou pracovat s vektorovými daty, jako by šlo o pole JSON. Databázový stroj SQL automaticky převádí vektory do a zpět z pole JSON, což činí nový typ transparentním pro klienta. Ovladače a všechny jazyky jsou proto automaticky kompatibilní s novým typem.
Nový typ vektoru můžete začít hned používat. Následující příklady ukazují různé jazyky a konfigurace ovladačů.
Important
Vyžaduje Microsoft.Data.SqlClient 6.1.0 nebo novější pro podporu nativních vektorů.
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
Pokud nepoužíváte nejnovější .NET ovladače, můžete stále pracovat s vektorovými daty v C# tím, že je serializujete a deserializujete jako JSON řetězec pomocí této třídyJsonSerializer. Tento přístup zajišťuje kompatibilitu s reprezentací varchar(max) vektorů, kterou SQL Server zpřístupňuje starším klientům.
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
Následující nástroje podporují datový typ vektoru :
- SQL Server Management Studio verze 21 a novější verze
- DacFX a SqlPackage verze 162.5 (listopad 2024) a novější verze
- Rozšíření SQL Serveru pro Visual Studio Code verze 1.32 (květen 2025) a novější verze
- Microsoft.Build.Sql verze 1.0.0 (březen 2025) a novější verze
- SQL Server Data Tools (Visual Studio 2022) verze 17.13 a novější verze
Limitations
Typ vektoru má následující omezení:
Tables
Omezení na úrovni sloupce nejsou podporována, s výjimkou omezení
NULLaNOT NULL.Omezení
DEFAULTaCHECKnejsou podporována pro vektorové sloupce.U
PRIMARY KEYsloupců se nepodporují klíčová omezení, napříkladFOREIGN KEYnebo. Rovnost, jedinečnost, spojení využívající vektorové sloupce jako klíče a pořadí řazení se nevztahují na datové typy vektorů .Neexistuje žádná koncepce jedinečnosti vektorů, takže jedinečná omezení nejsou použitelná.
Kontrola rozsahu hodnot uvnitř vektoru není použitelná.
Vektory nepodporují porovnání, sčítání, odčítání, násobení, dělení, zřetězení ani jiné matematické, logické a složené operátory přiřazení.
Vektorové sloupce nelze použít v tabulkách optimalizovaných pro paměť.
Indexes
- Indexy B-tree ani indexy columnstore nelze použít u sloupců typu vector. Nicméně můžete zahrnout vektorový sloupec jako zahrnutý sloupec do definice indexu.
- Vektorové indexy vytvářejí přibližný index ve sloupci vektorů, aby zlepšily výkon vyhledávání nejbližších sousedů. Chcete-li se dozvědět více o tom, jak funguje vektorové indexování a vektorové vyhledávání a jaké jsou rozdíly mezi přesným a přibližným vyhledáváním, viz Vektorové vyhledávání a vektorové indexy v SQL Database Engine.
Metadata schématu tabulky
- Uložený postup sp_describe_first_result_set systému správně nevrací vektorový datový typ. V důsledku toho mnoho klientů a ovladačů pro přístup k datům vidí datový typ varchar nebo nvarchar .
Tabulky registru
- Uložená procedura
sp_verify_database_ledgergeneruje chybu, pokud databáze obsahuje tabulku s vektorovým sloupcem.
Uživatelem definované typy
- Pomocí
CREATE TYPEnemůžete pro typ vector vytvořit typový alias. Toto omezení je podobné chování datových typů xml a json .
Trvale šifrováno
- Typ vektoru není podporován funkcí Always Encrypted.
Známé problémy
- Maskování dat aktuálně zobrazuje vektorová data jako datový typ varbinary na webu Azure Portal.