Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2025 (17.x) Vorschau der
Azure SQL-Datenbank
azureSQL Managed Instance
SQL SQL-Datenbank in Microsoft Fabric
Der Vektordatentyp wurde entwickelt, um Vektordaten zu speichern, die für Vorgänge wie Ähnlichkeitssuche und Machine Learning-Anwendungen optimiert sind. Vektoren werden in einem optimierten Binärformat gespeichert, werden jedoch der Einfachheit halber als JSON-Arrays verfügbar gemacht. Jedes Element des Vektors wird als ein Gleitkommawert mit einfachen Genauigkeit (4 Byte) gespeichert.
Um Entwicklern eine vertraute Erfahrung zu bieten, wird der Vektordatentyp erstellt und als JSON-Array angezeigt. Beispielsweise kann ein Vektor mit drei Dimensionen als '[0.1, 2, 30]'
dargestellt werden. Die implizite und explizite Konvertierung von und zum Vektortyp kann mithilfe von varchar-, nvarchar - und json-Typen erfolgen.
Hinweis
Überprüfen Sie einschränkungen und bekannte Probleme.
Vektor-Funktionen sind in Azure SQL Managed Instance verfügbar, die mit der Always-up-to-date-Richtlinie konfiguriert ist.
Weitere Informationen zum Arbeiten mit Vektordaten finden Sie unter:
Beispielsyntax
Die Verwendungssyntax für den Vektortyp ähnelt allen anderen SQL Server-Datentypen in einer Tabelle.
column_name VECTOR( {<dimensions>} ) [NOT NULL | NULL]
Maße
Ein Vektor muss mindestens eine Dimension aufweisen. Die maximale Anzahl unterstützter Dimensionen beträgt 1998.
Beispiele
Ein. Spaltendefinition
Der Vektortyp kann in der Spaltendefinition verwendet werden, die in einer CREATE TABLE
Anweisung enthalten ist, z. B.:
Das folgende Beispiel erstellt eine Tabelle mit einer Vektorspalte und fügt Daten in diese ein.
CREATE TABLE dbo.vectors
(
id INT PRIMARY KEY,
v VECTOR(3) NOT NULL
);
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. Verwendung in Variablen
Im folgenden Beispiel werden Vektoren mithilfe des neuen Vektordatentyps deklariert und Entfernungen mithilfe der VECTOR_DISTANCE
Funktion berechnet.
Der Vektortyp kann mit Variablen verwendet werden:
DECLARE @v VECTOR(3) = '[0.1, 2, 30]';
SELECT @v;
C. Verwendung in gespeicherten Prozeduren oder Funktionen
Der Vektordatentyp kann als Parameter in gespeicherten Prozeduren oder Funktionen verwendet werden. Zum Beispiel:
CREATE PROCEDURE dbo.SampleStoredProcedure
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Featureverfügbarkeit
Der neue Vektortyp ist unter allen Datenbankkompatibilitätsebenen verfügbar.
Konvertierungen
- Der Vektortyp kann nicht mit dem sql_variant Typ verwendet oder einer sql_variant Variablen oder Spalte zugewiesen werden. Diese Einschränkung ähnelt varchar(max), varbinary(max), nvarchar(max), xml, json und CLR-basierten Datentypen.
Kompatibilität
Verbesserungen am TDS-Protokoll
SQL Server speichert Vektoren in einem optimierten Binärformat, macht sie aber als JSON-Arrays verfügbar. Unterstützte Treiber verwenden Verbesserungen am TDS-Protokoll, um Vektordaten effizienter im Binärformat zu übertragen und anwendungen als systemeigene Vektortypen zu präsentieren. Dieser Ansatz reduziert die Größe des Payloads, eliminiert den Overhead des JSON-Parsing und bewahrt die volle Gleitkommagenauigkeit. Daher verbessert es sowohl die Leistung als auch die Genauigkeit bei der Arbeit mit hochdimensionalen Vektoren in KI- und Machine Learning-Szenarien.
Unterstützung von nativen Treibern
Anwendungen mit TDS Version 7.4 oder höher und aktualisierten Treibern können Vektordaten nativ lesen, schreiben, streamen und massenkopien.
Für diese Funktionen sind Versionen der unten aufgeführten Treiber erforderlich. Stellen Sie sicher, dass Sie die richtige Version verwenden, um die systemeigene Vektorunterstützung zu aktivieren.
-
Microsoft.Data.SqlClient: Version 6.1.0 führt den
SqlVector
Typ ein, der erweitert wirdSystem.Data.SqlDbTypes
. -
Microsoft JDBC-Treiber für SQL Server: Version 13.1.0 Preview führt den
microsoft.sql.Types.VECTOR
Typ und diemicrosoft.sql.Vector
Klasse ein.
Hinweis
Für Clients, die das aktualisierte TDS-Protokoll nicht unterstützen, macht SQL Server weiterhin Vektordaten als varchar(max)- Typen verfügbar, um die Abwärtskompatibilität sicherzustellen. Clientanwendungen können mit Vektordaten arbeiten, als wäre es ein JSON-Array. Das SQL-Datenbankmodul konvertiert automatisch Vektoren in und aus einem JSON-Array, wodurch der neue Typ für den Client transparent wird. Daher sind Treiber und alle Sprachen automatisch mit dem neuen Typ kompatibel.
Sie können sofort mit der Verwendung des neuen Vektortyps beginnen. Die folgenden Beispiele zeigen verschiedene Sprachen und Treiberkonfigurationen.
Von Bedeutung
Erfordert Microsoft.Data.SqlClient 6.1.0 oder höher für native Vektorunterstützung.
static void InsertNonNullVal(SqlConnection conn)
{
Console.WriteLine("Inserting non-null value with SqlDbType");
using SqlCommand command = new SqlCommand("INSERT INTO dbo.vectors VALUES (@Id, @VectorData)", conn);
command.Parameters.AddWithValue("@Id", 1);
var vectorParameter = new SqlParameter("@VectorData", Microsoft.Data.SqlDbTypeExtensions.Vector);
vectorParameter.Value = new Microsoft.Data.SqlTypes.SqlVectorFloat32(new float[] { 3.14159f, 1.61803f, 1.41421f });
command.Parameters.Add(vectorParameter);
command.ExecuteNonQuery();
}
static void ReadWithGetValue(SqlConnection connection)
{
Console.WriteLine("Reading values using GetValue method:");
using (SqlCommand commandSourceData = new SqlCommand("SELECT v FROM dbo.vectors;", connection))
using (SqlDataReader reader = commandSourceData.ExecuteReader())
while (reader.Read())
{
var vector = reader.GetValue(0);
if (vector != null && vector != DBNull.Value)
{
Console.WriteLine("Type: " + vector.GetType() + " Element Count: " + ((SqlVectorFloat32)vector).Length);
var values = ((SqlVectorFloat32)vector).Values;
Console.WriteLine("Values: " + string.Join(", ", values));
}
}
}
Hinweis
Wenn Sie die neuesten .NET-Treiber nicht verwenden, können Sie weiterhin mit Vektordaten in C# arbeiten, indem Sie sie mithilfe der JsonSerializer
Klasse serialisieren und deserialisieren. Dies gewährleistet die Kompatibilität mit der varchar(max)
-Darstellung von Vektoren, die von SQL Server für ältere Clients zur Verfügung gestellt wird.
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));
}
}
Werkzeuge
Die folgenden Tools unterstützen den Vektordatentyp :
- SQL Server Management Studio , Version 21 und höher
- DacFX und SqlPackage , Version 162.5 (November 2024) und höhere Versionen
- Die SQL Server-Erweiterung für Visual Studio Code , Version 1.32 (Mai 2025) und höhere Versionen
- Microsoft.Build.Sql Version 1.0.0 (März 2025) und höhere Versionen
- SQL Server Data Tools (Visual Studio 2022) Version 17.13 und höhere Versionen
Begrenzungen
Der Vektortyp hat die folgenden Einschränkungen:
Tabellen
- Einschränkungen auf Spaltenebene werden nicht unterstützt, mit Ausnahme von
NULL
/NOT NULL
Einschränkungen.-
DEFAULT
undCHECK
Einschränkungen werden für Vektorspalten nicht unterstützt. - Schlüsseleinschränkungen, wie
PRIMARY KEY
oderFOREIGN KEY
, werden für Vektorspalten nicht unterstützt. Gleichheit, Eindeutigkeit, Verknüpfungen mithilfe von Vektorspalten als Schlüssel und Sortierreihenfolgen gelten nicht für Vektordatentypen . - Es gibt keine Vorstellung von Eindeutigkeit für Vektoren, sodass eindeutige Einschränkungen nicht anwendbar sind.
- Das Überprüfen des Wertebereichs innerhalb eines Vektors ist ebenfalls nicht anwendbar.
-
- Vektoren unterstützen keine Vergleichs-, Additions-, Subtraktions-, Multiplikations-, Divisions-, Verkettungs- oder anderen mathematischen, logischen und zusammengesetzten Zuordnungsoperatoren.
- Vektorspalten können nicht in speicheroptimierten Tabellen verwendet werden.
Indizes
- B-Strukturindizes oder Spaltenspeicherindizes sind für Vektorspalten nicht zulässig. Eine Vektorspalte kann jedoch als eingeschlossene Spalte in einer Indexdefinition angegeben werden.
Tabellenschema-Metadaten
- sp_describe_first_result_set gespeicherte Systemprozedur gibt den Vektordatentyp nicht ordnungsgemäß zurück. Daher sehen viele Datenzugriffsclients und Treiber einen Varchar - oder nvarchar-Datentyp .
Ledgertabellen
- Gespeicherte Prozedur
sp_verify_database_ledger
generiert einen Fehler, wenn die Datenbank eine Tabelle mit einer Vektorspalte enthält.
Benutzerdefinierte Typen
- Die Erstellung des Aliastyps,
CREATE TYPE
der für den Vektortyp verwendet wird, ist nicht zulässig, ähnlich wie das Verhalten der XML- und JSON-Datentypen.
Immer Verschlüsselt
- Der Vektortyp wird mit dem Feature "Immer verschlüsselt" nicht unterstützt.
Bekannte Probleme
- Die Datenmaskierung zeigt derzeit Vektordaten als varbinary Datentyp im Azure-Portal an.