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 vektoros adattípus olyan műveletekre optimalizált vektoradatok tárolására lett kialakítva, mint a hasonlósági keresés és a gépi tanulási 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]'. Implicit és explicit konverzió a vektor típusból és típusba elvégezhető varchar, nvarchar és json típusok használatával.
Note
Az SQL Server 2025 (17.x) támogatja a fél pontosságú (float16) vektorokat. További információ: Félig pontosságú lebegőpontos támogatás vektoros adattípusban.
float16 a vektor jelenleg előzetes verzióban érhető el. A teszteléshez engedélyezze az PREVIEW_FEATURES adatbázis hatókörébe tartozó konfigurációs beállítást. Részletekért tekintse át PREVIEW_FEATURES = { ON | KI }.
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
A korlátozásokért tekintse át a korlátozásokat és az ismert problémákat.
Note
A vektorfunkciók az Always-up-to-date szabályzattal konfigurált felügyelt Azure SQL-példányban érhetők el.
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 az alaptípus a következő float32: . A félpontosság használatához explicit módon kell megadnia float16 .
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Dimensions
Egy vektornak legalább egy dimenzióval kell rendelkeznie. A támogatott dimenziók maximális száma 1998.
Examples
A. Oszlopdefiníció
A vektor típus használható egy CREATE TABLE utasítás oszlopdefiníciójában, például:
Az alábbi példa egy vektoroszlopot tartalmazó táblát hoz létre, amelybe adatokat szúr be.
A táblázat vektoroszlopát az alapértelmezett alaptípussal (float32) vagy explicit módon megadhatja float16 a fél pontosságú 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
Az alábbi példa vektorokat deklarál az új vektor adattípussal, és kiszámítja a távolságokat a VECTOR_DISTANCE függvénnyel.
A vektor típus változókkal használható:
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 vektor adattípus paraméterként használható a tárolt eljárásban 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
Szolgáltatás rendelkezésre állása
Az új vektor típus minden adatbáziskompatibilitási szinten elérhető.
A float16 vektorok támogatása jelenleg a PREVIEW_FEATURES konfiguráció alatt van.
Használata előtt kifejezetten engedélyeznie kell VECTOR(..., float16).
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Conversions
- A vektor típus nem használható sql_variant típussal, és nem rendelhető hozzá sql_variant változóhoz vagy oszlophoz. 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.
Note
float16 A vektorok jelenleg varchar(max) (JSON-tömb) formátumban vannak továbbítva TDS-en keresztül. A bináris átvitel támogatása float16 még nem érhető el az olyan illesztőprogramokban, mint az ODBC, a JDBC és a .NET.
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 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-illesztőprogramokat használja, akkor is dolgozhat vektoradatokkal A C#-ban, ha az osztály használatával JsonSerializer szerializálja és deszerializálja azokat JSON-sztringként. Ez biztosítja a kompatibilitást az varchar(max) SQL Server által a régebbi ügyfelek számára közzétett vektorok ábrázolásával.
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 a
NULL/NOT 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.
A vektoron belüli értékek tartományának ellenőrzése szintén 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.
a vektoroszlopok nem használhatók memóriaoptimalizált táblákban.
Indexes
- B-fa indexek vagy oszlop centrikus indexek nem engedélyezettek vektoros oszlopokon. Egy vektoros oszlop azonban megadható egy indexdefinícióban szereplő oszlopként.
Táblázat séma metaadatai
- sp_describe_first_result_set rendszer által tárolt eljárás nem adja vissza helyesen a vektort adattípust. Ezért sok adatelérési ügyfél és illesztőprogram lát egy varchar vagy nvarchar adattípust.
Főkönyvtáblák
- A tárolt eljárás
sp_verify_database_ledgerhibát okoz, ha az adatbázis egy vektoroszlopot tartalmazó táblát tartalmaz.
Felhasználó által definiált típusok
- A
CREATE TYPEtípusú használatával történő aliastípus létrehozása nem engedélyezett, hasonlóan az xml- és json adattípusok viselkedéséhez.
Always Encrypted (mindig titkosítva)
- az Always Encrypted funkció nem támogatja a vektortípust.
Ismert problémák
- A Data Masking jelenleg varbináris adattípusként jeleníti meg a vektoradatokat az Azure Portalon.