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) Preview
AzureSQL Database Azure SQL Managed Instance
SQL-database
in Microsoft Fabric Preview
Het vectorgegevenstype is ontworpen om vectorgegevens op te slaan die zijn geoptimaliseerd voor bewerkingen zoals overeenkomsten zoeken 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]'. Impliciete en expliciete conversie van en naar het vectortype kan worden uitgevoerd met varchar-, nvarchar- en json-typen.
Note
SQL Server 2025 (17.x) Preview ondersteunt halfprecisie (float16) vectors.
Kijk hier voor meer informatie.
float16 vector is momenteel beschikbaar voor preview. Als u wilt testen, schakelt u de configuratieoptie voor databasebereik PREVIEW_FEATURES in. Raadpleeg PREVIEW_FEATURES = { AAN | UIT }.
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Note
Raadpleeg beperkingen en bekende problemen voor beperkingen.
Vectorfuncties zijn beschikbaar in Azure SQL Managed Instance dat is geconfigureerd met het beleid Always-up-to-date .
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. Als u halve precisie wilt gebruiken, moet u float16 expliciet opgeven
column_name VECTOR(<dimensions> [, <base_type>]) [NOT NULL | NULL]
Dimensions
Een vector moet ten minste één dimensie hebben. Het maximum aantal ondersteunde dimensies is 1998.
Examples
A. Kolomdefinitie
Het vectortype kan worden gebruikt in de kolomdefinitie in een CREATE TABLE instructie, bijvoorbeeld:
In het volgende voorbeeld wordt een tabel met een vectorkolom gemaakt en worden er gegevens in ingevoegd.
U kunt een VECTOR kolom in een tabel definiëren met behulp van het standaardbasistype (float32) of expliciet opgeven float16 voor halve precisieopslag.
CREATE TABLE dbo.vectors
(
id INT PRIMARY KEY,
v VECTOR(3) NOT NULL -- Uses default base type (`float32`)
);
CREATE TABLE dbo.vectors (
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
In het volgende voorbeeld worden vectoren gedeclareert met behulp van het nieuwe vectorgegevenstype en worden afstanden berekend met behulp van de VECTOR_DISTANCE functie.
Het vectortype kan worden gebruikt met variabelen:
DECLARE @v VECTOR(3) = '[0.1, 2, 30]';
SELECT @v;
DECLARE @v VECTOR(3, float16) = '[0.1, 2, 30]';
SELECT @v;
C. Gebruik in opgeslagen procedures of functies
Het gegevenstype vector kan worden gebruikt als parameter in opgeslagen procedure of functies. Voorbeeld:
CREATE PROCEDURE dbo.SampleStoredProcedure
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Beschikbaarheid van functies
Het nieuwe vectortype is beschikbaar op alle databasecompatibiliteitsniveaus.
Ondersteuning voor float16 vectoren is momenteel beperkt tot de PREVIEW_FEATURES configuratie.
U moet deze expliciet inschakelen voordat u deze gebruikt VECTOR(..., float16).
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
Conversions
- Het vectortype kan niet worden gebruikt met het sql_variant type of toegewezen 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 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.
Note
float16 vectoren worden momenteel verzonden als VARCHAR(MAX) (JSON-matrix) via TDS. Ondersteuning voor binair transport voor float16 is nog niet beschikbaar in stuurprogramma's zoals ODBC, JDBC en .NET.
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 onderstaande 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
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 u niet de nieuwste .NET-stuurprogramma's gebruikt, kunt u nog steeds werken met vectorgegevens in C# door deze te serialiseren en deserialiseren als een JSON-tekenreeks met behulp van de JsonSerializer klasse. Dit zorgt voor compatibiliteit met de varchar(max) weergave van vectoren die worden weergegeven door SQL Server 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, met uitzondering van
NULL/NOT NULLbeperkingen.-
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 ook niet van toepassing.
-
- Vectoren bieden geen ondersteuning voor vergelijkingen, optellen, aftrekken, vermenigvuldigen, delen, samenvoegen of andere rekenkundige, logische en samengestelde toewijzingsoperatoren.
- vectorkolommen kunnen niet worden gebruikt in tabellen die zijn geoptimaliseerd voor geheugen.
Indexes
- B-tree-indexen of columnstore-indexen zijn niet toegestaan voor vectorkolommen . Een vectorkolom kan echter worden opgegeven als een opgenomen kolom in een indexdefinitie.
Metagegevens van tabelschema
- sp_describe_first_result_set systeem opgeslagen procedure retourneert het gegevenstype vector niet correct. Daarom zien veel clients en stuurprogramma's voor gegevenstoegang een varchar - of nvarchar-gegevenstype .
Grootboektabellen
- Met de opgeslagen procedure
sp_verify_database_ledgerwordt een fout gegenereerd als de database een tabel met een vectorkolom bevat.
Door de gebruiker gedefinieerde typen
- Het maken van aliastypen die worden gebruikt
CREATE TYPEvoor het vectortype is niet toegestaan, vergelijkbaar met het gedrag van de xml- en json-gegevenstypen.
Altijd versleuteld
- vectortype wordt niet ondersteund met de functie Always Encrypted.
Bekende problemen
- Gegevensmaskering toont momenteel vectorgegevens als varbinair gegevenstype in Azure Portal.