Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database a Microsoft Fabricben
A vektoradatok típusa olyan vektoradatokat tárol, amelyeket olyan műveletekre optimalizáltak, mint a hasonlóságkeresés és a gépi tanulás alkalmazások. A vektorok tárolása optimalizált bináris formátumban történik, de JSON-tömbökként vannak elérhetővé téve a kényelem érdekében. A vektor minden eleme egyetlen pontosságú (4 bájtos) lebegőpontos értékként van tárolva.
A fejlesztők számára ismerős élmény érdekében a vektor adattípus JSON-tömbként jön létre és jelenik meg. Egy három dimenzióval rendelkező vektor például a következőképpen jelenhet meg '[0.1, 2, 30]'. A vektortípus és a char, nchar, varchar, nvarchar és json típusok közötti átalakítás implicit vagy explicit lehet mindkét irányban. A vektor és minden más adattípus közötti átalakítás nem engedélyezett. Két vektorérték közötti átalakítás csak akkor engedélyezett, ha a méretek és az alap típus (float32 vagy float16) megegyeznek; ellenkező esetben 42204 vagy 42238 hiba jelentkezik.
Amikor egy stringet vagy json értéket vektorrá alakítasz, az értéknek JSON számtömbnek kell lennie. Az elemek számának egyenlőnek kell lennie a vektordimenziókkal; ellenkező esetben a 42204-es hiba következik be. Más értékek 13670-es hibát okoznak. A tömb előtti és utáni fehér teret figyelmen kívül hagyjuk.
Amikor vektort egy stringtípussá alakítasz, az eredmény tudományos jelölést használ, például [1.0000000e+000,2.5000000e+000,-3.0000000e+000]. Amikor vektortjson-ra konvertálunk, az eredmény tizedes jelölést használ, például [1.0000000000,2.5000000000,-3.0000000000]. Ha a célhossz túl rövid, akkor 42211 hiba következik be. Az érték nincs csonkolva.
a vektor precedenciája alacsonyabb, mint a string típusoké A UNION, CASE, COALESCE és más olyan kifejezésekben, amelyek a vektor típust sztringtípussal kombinálják, az eredmény a sztringtípus.
A vektoradatokkal kapcsolatos további információkért lásd:
Mintaszintaxis
A vektor típusának használati szintaxisa hasonló a tábla összes többi SQL Server-adattípusához.
column_name VECTOR ( { <dimensions> } ) [ NOT NULL | NULL ]
Alapértelmezés szerint a bázis típusa float32. A félprecizitás használatához a float16-ot kifejezetten megadjuk.
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Dimensions
Egy vektornak legalább egy dimenzióval kell rendelkeznie. A maximális dimenziószám a vektorbázis típusától függ:
- A float32 akár 1 998 dimenziót is támogat.
- A float16 akár 3 996 dimenziót is támogat.
Szolgáltatás rendelkezésre állása
A vektoros adattípus minden adatbázis-kompatibilitási szinten elérhető. Ha nem határozsz meg alaptípust, a vektor float32-t használ.
A vektorfunkciók az Always-up-to-date szabályzattal konfigurált felügyelt Azure SQL-példányban érhetők el.
Félpontosságú float16 vektorok
A fél precíziós (float16) vektorok általában elérhetők Azure SQL Database-ben, Azure SQL Managed Instance-ban és SQL adatbázisban a Microsoft Fabric-ben. Előzetes beállítás nem szükséges.
Az SQL Server 2025 (17.x) verzióban félprecíziós (float16) vektorok előnézetben elérhetők. A float16 SQL Server 2025-ben való használatához engedélyeznie kell az
PREVIEW_FEATURESadatbázis-hatókörű konfigurációs beállítást. További információért lásd: Előnézeti funkciók engedélyezése az SQL Server 2025-ben.
További információért a félprecízitású vektorokról lásd: A félpontosságú lebegőpontos számok támogatása a vektor adattípusban.
Engedélyezze az előnézeti funkciókat az SQL Server 2025-ben
Néhány előnézeti funkcióhoz az SQL Server 2025-ben be kell kapcsolni az PREVIEW_FEATURES adatbázis keretes konfigurációs opciót.
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
További információért lásd: PREVIEW_FEATURES.
Examples
A. Oszlopdefiníció
Használd a vektortípust oszlopdefiníciókban egy CREATE TABLE állításon belül. Például:
Az alábbi példa egy vektoroszlopot tartalmazó táblát hoz létre, amelybe adatokat szúr be.
Definiálj egy vektoroszlopot egy táblázatban az alapértelmezett alap típus, float32 vagy float16 használatával félprecíz tároláshoz.
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. Használat változókban
A következő példa vektorokat az új vektoradattípus használatával deklarál, és a távolságokat a függvény VECTOR_DISTANCE segítségével számolja ki.
Használd a vektortípust változókkal:
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. A tárolt eljárásokban vagy függvényekben való használat
A vektoradattípust használhatod paraméterként tárolt eljárásokban vagy függvényekben. Például:
CREATE PROCEDURE dbo.SampleStoredProcedure
(
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
)
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Conversions
- Nem lehet a vektortípusta sql_variant típussal használni, és nem lehet sql_variant változóhoz vagy oszlophoz rendelni. Ez a korlátozás hasonló a varchar(max), varbinary(max), nvarchar(max), xml, json és CLR-alapú adattípusokhoz.
Compatibility
A TDS-protokoll fejlesztései
Az SQL Server optimalizált bináris formátumban tárolja a vektorokat, de A kényelem érdekében JSON-tömbökként teszi elérhetővé őket.
A támogatott illesztőprogramok a TDS protokoll továbbfejlesztései segítségével hatékonyabban továbbítják a vektoradatokat bináris formátumban, és natív vektortípusként jelenítik meg őket az alkalmazásoknak. Ez a megközelítés csökkenti a hasznos adatok méretét, kiküszöböli a JSON-elemzés többletterhelését, és megőrzi a teljes lebegőpontos pontosságot. Ennek eredményeképpen javítja a teljesítményt és a pontosságot, ha nagy dimenziójú vektorokkal dolgozik a mi-ben és a gépi tanulási forgatókönyvekben.
Natív illesztőprogram-támogatás
A TDS 7.4-es vagy újabb verzióját használó alkalmazások és frissített illesztőprogramok natív módon olvashatják, írhatják, streamelhetik és tömegesen másolhatják a vektoradatokat.
Ezekhez a képességekhez az alábbi illesztőprogramok verziói szükségesek. Győződjön meg arról, hogy a megfelelő verziót használja a natív vektorok támogatásának engedélyezéséhez.
-
Microsoft.Data.SqlClient: A 6.1.0-s verzió bevezeti a típust, és kiterjeszti
SqlVector.System.Data.SqlDbTypes -
Microsoft JDBC-illesztő az SQL Serverhez: A 13.1.0-s verzió előzetes verziója bemutatja a típust és
microsoft.sql.Types.VECTORazmicrosoft.sql.Vectorosztályt.
Note
A float16 vektorok natív bináris szállítása támogatott a Microsoft JDBC Driver 13.4 for SQL Server és a Microsoft ODBC Driver 18.7.1 for SQL Server. Ezek az illesztőprogramok a fél precízitású vektorértékeket a natív vezetékes formátummal szerzasítják és deserializálják, csökkentve a hálózati hasznos terhet a JSON reprezentációhoz képest.
Használja ezeket az illesztőprogram-verziókat vagy újabbat a natív float16-átvitelhez. Azok az illesztőprogramok, amelyek nem támogatják a natív float16 átvitelt, továbbra is működhetnek varchar(max) JSON-tömbökként ábrázolt vektorokkal.
Note
A frissített TDS protokollt nem támogató ügyfelek esetében az SQL Server továbbra is varchar(max) típusú vektoradatokat tesz elérhetővé a visszamenőleges kompatibilitás biztosítása érdekében. Az ügyfélalkalmazások úgy használhatják a vektoradatokat, mintha JSON-tömb lenne. Az SQL Database Engine automatikusan JSON-tömbökké alakítja át a vektorokat, így az új típus átláthatóvá válik az ügyfél számára. Ezért az illesztőprogramok és az összes nyelv automatikusan kompatibilisek az új típussal.
Az új vektortípust azonnal elkezdheti használni. Az alábbi példák különböző nyelveket és illesztőprogram-konfigurációkat mutatnak be.
Important
A natív vektorok támogatásához a Microsoft.Data.SqlClient 6.1.0-s vagy újabb verziója szükséges.
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
Ha nem a legújabb .NET drivereket használod, akkor is dolgozhatsz vektoradatokkal C#-ban úgy, hogy a(z) JsonSerializer osztály használatával JSON-karakterláncként szerializálod és deszerializálod őket. Ez a megközelítés biztosítja a kompatibilitást az varchar(max) SQL Server régebbi kliensekhez kínált vektorok ábrázolásával is.
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
A vektor adattípust a következő eszközök támogatják:
- Az SQL Server Management Studio 21-es és újabb verziói
- DacFX és SqlPackage 162.5-ös (2024. novemberi) és újabb verziók
- A Visual Studio Code 1.32-es (2025. májusi) és újabb verzióihoz készült SQL Server-bővítmény
- Microsoft.Build.Sql 1.0.0-s (2025. márciusi) és újabb verziók
- Az SQL Server Data Tools (Visual Studio 2022) 17.13-es és újabb verziói
Limitations
A vektortípusra a következő korlátozások vonatkoznak:
Tables
Az oszlopszintű korlátozások nem támogatottak, kivéve
NULLa ésNOT NULLkorlátozásokat.DEFAULTésCHECKa vektoroszlopok nem támogatják a korlátozásokat.A fő kényszerek, mint például
PRIMARY KEYvagyFOREIGN KEY, nem támogatottak a vektoroszlopok esetében. Az egyenlőség, az egyediség, a vektoroszlopokat kulcsként használó illesztések és rendezési sorrendek nem vonatkoznak a vektoros adattípusokra.A vektorok egyediségének fogalma nincs, ezért az egyedi korlátozások nem alkalmazhatók.
Az értéktartomány ellenőrzése egy vektoron belül nem alkalmazható.
A vektorok nem támogatják az összehasonlítást, az összeadást, a kivonást, a szorzást, az osztást, az összefűzést vagy bármely más matematikai, logikai és összetett hozzárendelési operátort.
Vektoroszlopokat nem használhatsz memóriaoptimalizált táblákban.
Indexes
- Nem használhatsz B-fa indexeket vagy columnstore indexeket vektoroszlopokon . Ugyanakkor vektoroszlopot is bevonhatsz egy indexdefinícióba bevont oszlopként.
- A vektorindexek közelítő indexet hoznak létre egy vektoroszlopon, hogy javítsák a legközelebbi szomszédok keresésének teljesítményét. Ha többet szeretnél megtudni a vektorindexelésről és a vektorkeresésről, valamint a pontos és közelítő keresés különbségeiről, lásd a Vector Search és a vector indexes (Vektor-indexek az SQL Database Engine-ben.
Táblázat séma metaadatai
- A sp_describe_first_result_set rendszer tárolt eljárása nem adja vissza helyesen a vektor adattípust. Ennek eredményeként sok adathozzáférési ügyfél és illesztő lát egy varchar vagy nvarchar adattípust.
Főkönyvtáblák
- A tárolt eljárás
sp_verify_database_ledgerhibát generál, ha az adatbázisban vektoroszlopos táblázat található.
Felhasználó által definiált típusok
- Nem lehet alias típust létrehozni a vektortípus használatával
CREATE TYPE. Ez a korlátozás hasonló az xml és json adattípusok viselkedéséhez.
Always Encrypted (mindig titkosítva)
- A vektortípus nem támogatott a Always Encrypted funkcióval.
Ismert problémák
- A Data Masking jelenleg varbináris adattípusként jeleníti meg a vektoradatokat az Azure Portalon.