Skip to content

Commit 1b3ed36

Browse files
committed
Adiciondo scripts da power live sobre ai no sql server
1 parent 35b06ca commit 1b3ed36

File tree

6 files changed

+573
-0
lines changed

6 files changed

+573
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/*
2+
AI no SQL Server 2025
3+
4+
Rodrigo Ribeiro Gomes
5+
7 anos na Power Tuning
6+
Consultor -> Head de (SQL Server -> Inova��o -> IA )
7+
8+
https://iatalk.ing
9+
https://thesqltimes.com
10+
https://www.red-gate.com/simple-talk/author/rodrigor-gomes-2/
11+
https://www.linkedin.com/in/dba-rodrigo/
12+
https://devblogs.microsoft.com/azure-sql/author/rodrigor-gomes/
13+
14+
15+
� � �� �� � �
16+
Z�ZZ�ZZZZ�Z���ZZZ�������Z�ZZ�Z��ZZ������ZZ�ZZZZZ�ZZ�� �NeZZZZZ��� �NeZN��� ����� �NNNN�ZZZZZZN N�ZZZeZZZZee
17+
Z��Z�Z�����Z��Z��ZZZZZZZZZZ�ZZZZ�ZZZZ�ZZZ��Z�ZZZ��ZN� ��eZ��ZZZZN�n ����� ����ZZƿ �NZZZZZZZZZZ�NN�����N�NNNNNZZZZZZZeZZZ
18+
ZZ�ZZZ��ZZZ��ZZZ�ZZ�ZZZZZZZZZZZZZZZZZZZ��ZZZZZ�ZZ�Z�� �NeZZZZZZZZN� �ƿ e���ZeZeZ�� ��eZZZeZeZeZZ��NN��ZZZZeeeeZZeeeZZeZZe
19+
��Z�ZZZZZZ��ZZZZZZZZ�ZZZ�����ZZ�Z�ZZ���ZZZZZZ�ZZZZ�ƿ �ZZZZZZZZZZZN� ����N2eZeZZZN� N�eZZZeZZZZeZZZZZZZZZeZZZZZZZZZZZeZeZZ
20+
ZZ��Z�ZZ��ZZ�ZZ���ZZZZ��ZZZZZZZZZ�ZZ�Z�Z�ZZZZZZ�ZZ�� 2�eZZZZ�ZZZZZZ�� � o����������NN� ��eZZZZZZZZZZZZZZZZZ�ZZZZZZeeeZeZZeZZZ
21+
�ZZZZ�ZZZZZZZ�ZZZZ�ZZ�ZZZZZZ�ZZZZZZZZZZZZZZ�ZZZZZZZ� Z�2ZZZZZZZZZ�Z��� ����� ��eZZeZeZZeZZeeZZZeeeeZZZZeZZZeZeZZZZZ
22+
ZZ���ZZZZZZZZ�ZZ�ZZZZ�ZZZZZZZZZZZ�ZZZ�ZZZZZZZZZZZZ�� n�eZZZZZZZ�ZZZZ�������Z ��ZZZZZZeZeZZZeZZZZZZZZZeeZZZeZZeZZZZe
23+
Z�ZZZZ�����Z�ZZ��ZZZZZZZZZ��ZZ�ZZZZZZZZZZ�ZZZ�Z�Z�Zƛ ��Zeeee����ZZZ��ZZ�N��������n �ZZZZeZZZZZeZZZeeeZeeeZeZZeeZZZZeZeeee
24+
ZZ��ZZZZZZZZZZZZ��ZZZZZ�ZZZZ�ZZZZ�ZZ�Z��ZZZZZZZZZZZ�n Non����2��nnn22e�����ZZZZZ��������� ��eeZZZZZZZZZZZeZZZZZZZeZZZZZZZeeeeeZZe
25+
��ZZZZZZZZ��Z�ZZZZ�ZZZ�ZZZZZZZZZZZZZZZZZZZZZZZ�ZZZeZ����Z��NNZ����N��NZno���2eeZZZZZZZeZ�� ��eZZZZZZeZZeeZeeZeZZeeeeeZZeZeeeZeeZZe
26+
ZZZZZZZZZZZZZZZZ��Z�ZZZZZZZZZZZZZZZZZZZZZZ�ZZZZZZ2e���������eo��e��n2�eZ��Z��2eZeZeZZZZNƦ �N2ZeeZeeZZZZZZZZZZeZZZZZZZZZeZZeZZeZeeZ
27+
ZZ�ZZ�Z�ZZZZZZ�ZZZZZZZZZZZZZ�ZZZZZZ�ZZZZZZZZZZZen2�N��N�Nn 2����ƛn�N����2����neZZZ�ZZ��n ��ZZZZZZZeZZeZZeeZeZZZeeeeZeeeeeeeeeeZeeZ
28+
Z�ZZZZZZ��Z�ZZZZZZZZZZ�ZZZZZZZZZZZZZZZZZZZZZZZZe���2 2N�����Z����������Z��N2Z�Z22ZZZZ�� n��eeZZeZZeZZZZZZZeZZZZeZZeeeeeeZZZeZZeeZZ
29+
ZZZZ�Z�ZZZ�ZZZ�ZZ�ZZ�ZZZZZ���ZZZZ�ZZZZ��ZZZZZ��Z�����o n� ��2en � ���2����N�e�NZ2ZZ��� ��NNNN�ZeZeZZeZZZeZeZZeeeZeZeZZZeeeeZZeZZee
30+
�ZZ�ZZZZZ�ZZZZZZ�ZZZZZeZZZZZZZZZZZZZZZZZZZZZZ�2��������������զ ������Ne��� ��Z ��NNNNNNNNNNNNNNNNNNNNNNNNN�eeeeeeeeeZ
31+
�ZZZZ�ZZZZZZ���ZZZZZZZZZZZZZZZZZZ�ZZZZZZZeZZZ�ne�NNe o� ���oo� ����N�� ��N ��NNN�eo� NeeZZZeeeee
32+
ZZZZZZ�ZZ�ZZZZZZZZ�ZZZZZZZZZZ�ZZZZZZZZZZZZZZ��nen� � � �o���ono n��� ���eNNƛ NeeeeZeZZZZ
33+
ZZZZZZZZZZZZZZZZ�ZZZZZZZZZZZZZZZZ�ZZZZZZZZZZ��nZ22e� ������n2e����oon222� N�� ���eeZe�NNNNN�n �one��NNN�eeeeeeeZeZ
34+
ZZZZ�ZZZZZZZZZZ�ZZZZZZZZZZeZZ�eZeZZZZZ�ZZeZZ�Nn�Zn �� ���� �o22���� ����NeeeZeeZeeZZ�NNNNNNNNNNNNNNNNNNNNNNNNN�eeeZeZZeeZ
35+
ZZZZZZZZZZZZZZZZeZZZZZZZZZ�NNNN�ZZeZZZZZZZZZ�N 2 �n2e2N����2o� � �n e���NZeZ�ZZZZZZZZZeeZZeZZeeeeeZNn NeZZZeZZeee
36+
ZZZZZZZZ��Z�ZZZZ�ZZZZZZZ�NNƿ�����eZZZZZZZN��� �Z �NN 2�N������N2n��2ZZZeZeeeeZZeeZeZZeZZZZeZZZeZN �NeZeeZZeZZe
37+
ZZZZZZZZZZZZZ�Z�ZeZ�ZZZ�N� n�NZZZZZZN� eN� ����N��n�Z 2n2Z �o ��ZeZZZZZZeZeZZZeZeZeeeeZeeZeZNN�N���NNNNNNN�eeeeeZZeZZ
38+
ZZZZ�Z�ZZZ�ZZZeZZZZZZZZN� �NeeZZZƛo2 � �����Z��ƿN�2 �NN�eeeZeZZZZZeZeZZeeeZZeeZeeZe��N��ZeeeeeeeeZZZZeeeeee
39+
�Z�ZZZZZZZZZ�ZZZZZZZeZN� ���� n��eZZZ� onno��� �� �� ��n� ono��� �NZeZZeZZeeZeZeeeZZZeeeeZeeeeeeeee22eeeeeeeeeZeeZZZN�2
40+
ZZ�ZZ�ZZZZZZZZZZZZZ�Z�N �������Zn ��e�NN� ��N 2o� �2 2� �o� �oe�2nNZZZZZeZZZZZZZeeeeeeZZeeeeZZZZZZeZZZeeZeZZZZeeeee��
41+
ZZZZZZZZZZZZZZZZZZZZZN� �eƛ �nZ��ƛ � �� nn��� o�N�2����ZN��n�non2ne o2�ZeeZZZeeZeZZeeeeZZeeZeZeeeeZeZZZZeeZZZZZZZZeZZZN�
42+
ZZZZZZZZZZZZZZZZZZ����e en Ze� ����2o� �� 2Zo2�n �onne� N�ZZZeZZZZZZZZeZZZeeZZZeZeZZee2eeeeeeeeeeeeeeeeeZ�
43+
�Z�ZZZZZZZZZeZZZ���� �� ��� � �� �e 2e2 e ��2� �22on ZNZZZZZZeeZZeZeeeeZeeZZeZeZeeeeZeeeeeeZZeZeZeeeee��
44+
ZZe�ZZZZeZZ������� 릛����������� ���� �� ZNN�������Nզn�2� �onn� N�eZeZe��ZeeeZZZZZeeeeeeeeeZ�NNNNNNZeZZZeeZZZeZeZ��
45+
ZZZZZZ�NN������� o2 �ZeZZZZeZ����� �ƿ �� Z�NeNNnoo��NNZeZZNNNN�NNZeeeeZeeeeZeZZZZN� NN�eeeZeeeZeeeZ��
46+
ZZZZZ�N� o Z�2� e�eZZZZZZZZeZ���� � ������� �� �Z �� �o� NNZeeeNN �N2eeZeeZZZZeeeZNN �� Z�eeeeeeZeZZeeZ��
47+
ZZZZ�N e ��� � �NeeZZZZZeZZ�Ze��ƿ �Z 2nnnn��� ���n�on�oo� NNZZZZ�N ��� �ZeZZeeZeeeZeeZN� ��� �NeeZeeZeeeeeZeZ���
48+
�ZZZNZ N��� ��N� � �NeZZZZeZZZZeZZZZN��n�e �oeene��� �� � ����ooNNZeeeeNN ��� o�2eeeZZeZeZeeeN� ��� ��eeZeeZZZeeZeeNNN�n
49+
ZZZZN� �Z�N� ��2N� � ��eZZZZZZZZZZZZZZN�e 2Z �ne�No���ƛ oo �2�Z��NZ�NZZZeZZNn ��� ��2ZeeeZeZeeZeZN ���� �N2eeeZeeZeZeeeN� ���
50+
ZZZZN� ��� ��eZNo �ZeZZeZZeZZZZeeZNN� n �Z����������������Z� �NZeZeeNN ��� ��eeZeZeeeeeeeeNN ��� ��eeZeeeeeeeeZ��
51+
ZZZZ�� � o�ZeZN� �eZZZeZZZZZZ�ZZNN � � ��n������������N� nNZZZZeNZ ��� �NeeeZeeZeeeeZZN� ���� ��eeeeZZZeZeeZZ��
52+
ZZZZZNN o �N2eZN ��eeZZZZZZeZeZZNN� �� �� �onn�� � ���eNZeeZ�� ��� ��eeZZeeZZZZeeNN ��� ��2eeeeeeeeZZe��
53+
ZZZZZZNƛ �Z2�NeeZN ��eeZZeZZZZZe�NN �N � �no��oo n�2eeZNe ��� �N2eeeeeZeeeeeeN2 ���� e�2eeeeeeeeZeeZ��
54+
ZZZZZZZ���n2o ��NZN ��eeZZZZZ���ZZo o����� �� � � � � �ee2noonn��N���eN ��� �Z2eeeeeeeeeee�N ��� ��neeeeeeeeeeeeZ������
55+
ZZZZZZZZ�� �e ��� ��Z���ZZZ2�n�N����NZZZ�� �� �o�oZn����o2� ����Z ���NNNNNNNNNNNNNN ���� ��NNNNNNNNNN�eeeeeeeZ�ƿ
56+
ZZZZZZZZ�� � Ʀ ��eZ2���N�N�ZeZeZZZee2��ƛ �o� ��oo���nnoo N�������� e �n�NN�Zeo� ���� N��eZZeeeeee
57+
ZZZZZZZZ�� �ƿ 2����no2� ���2ZeZeeZeZZ�Z2���� ��o��2no����oeo Z���N�NN�������ƛ ����������������� ��eeeZeeeee
58+
Z�ZZZZZZZƦ �N����NN�ZZN�nZN�N2onn2oeeee2eeee�e2e����� N����ZZ�eN��� ������ƿ ���������������� ��eZ��������
59+
ZZZZZZZZZ�� ��o2Zen22222ZZ��2Z�N�2nZ�ne�Ze2e�eeZen2N��������e� ��o�������ZZ���N�eNN��oo ���Z�������2 ��������� �NeN�
60+
eZZZZZZZZN� en2ee2ee2nn22Znn�nnNe2n��2oN�Z222�e2eeon���Z������������2Z�eeeeeZeNeeNNN�����N2��Z2N�Z�NN�� ��Nee�N
61+
ZZZ�ZZZZ�N� ��222222n��e22nZZeeZ2N2e2N2eoN2�ee2Z�ee�2n��Zenn2Ze22222eeNeeeZZZeeNZe2N�ZZZZZ�Z2�NZn�e��o�����NNNNNNNNNNN�22eZƿ
62+
ZZZZZZZZNN ��22222n2n2nZeZnnnnZee��ZneZee�N2Zeee2�eeZZ2n�2eZennN�eeZeZeeZZZe�eZ2�ZZe�ZZ�ZZZZZen�2Z�2ƿ�n�N�o�222eeee2e2Zee��
63+
ZZ�ZZZZZNe NNe22222eennnnne��nnn22n��Z�Z22��2eeeeeo��2eZen�eZZ�eoe�ZeeZZZZZZe�ZZeZZeZZZZZZZZZZZZ��oN2�e�o����e�eeeeeeeZeeeeN�
64+
�ZZeZZZ�N ��ee2ee222e�22n2nn2��N2nn2�2eene2e�eZeZZZ2�Z�N��Ze�e�e�noN�ZeeZZZZee�Z�N�����������ZZ�N2����e��2�N�eo2eeeeeeeZee��
65+
ZZZ�ZZZ�� n�2e222ne222ne�e2nnnnnN�ZnZ�N2neenZeeZeeeenPOWER TUNING POWER TUNING POWER TUNING POWERZZZ��Nn��2Z�ZeN�e�2�2eeeZeeeeeƛ �
66+
ZZZZZeZ�N �2n22nn22n222nnne��2222eN��NN�o2eeeeeeeZeeePOWER TUNING POWER TUNING POWER TUNING POWERZ�ZZ���ZZeNZ2N�nN���oeeeeeeeeZ�
67+
ZZZZ�ZZ�� Zn2neen2e22nnn222e22��222���Nn2222eeee2eee�POWER TUNING POWER TUNING POWER TUNING POWER�����N���2nZ����N���nneeeZeeeN�
68+
ZZZZZZZZN� nn2e222e222ZZZ2nnn2222e�Ze��ƿ22eeeeeeZZeZZPOWER TUNING POWER TUNING POWER TUNING POWER������N�Z�N��N��Z��N�oeeeeeZe�Z
69+
ZZZZZZZZ��e�ne2n2222222n22ZZ�ee2222e2e��222eeeeeeeeee�POWER TUNING POWER TUNING POWER TUNING POWER�����Z���eZ�Z2enNNN��o2e2eZeZ�
70+
ZZZZZZZZZƿneoo22222222e22n222eeee��������2eeeZeeeeZZZPOWER TUNING POWER TUNING POWER TUNING POWER��������NeeZZ�NN����N�oeeZee��
71+
ZZZZZZZZ�N�oe��Z2oon2222nn2222e���Ʀ �����NZZZeeeePOWER TUNING POWER TUNING POWER TUNING POWERZ��������e�ZZZZeZ����N�2eeeZ�� �Z
72+
ZZZZZZZZ�զ2n2nnZ���22n2een22n�� ���N�eeeeeZZZZZZZ�Ze�Z������������ZZZZ�������Z��������N�ZZZZZ������Z�N�oeZZZƿ Z�
73+
ZZZZZZZZ�՛ne22eno�n2eZ�2ZZZZ�� nooe՛ N�NNZZZZZZZZZ����oe��N�Z�2eeZeeeZeZeZZZZZZZZZ����Z���eeZZZZ�ZZ�N���No2eeZ� ��
74+
ZZeZ�e�ZZN�o2222neZ�n2e�N������� ��ƛ ���� ����NZZZZeZ�2���o���2e�2ZeeeeeZeZeeZZZZZZ������Z���e2�����NN�eeZ���oeZ�� e�N�����Z
75+
Z�ZZZZZZ�N2�e22eZe2�N���e onen� ��Z� n���eZZe��2�N�n��enN2ZeZeZZZZZZZeZZ�eN����������e2�����NNNN�N����neZNN��NNNN�Ze
76+
�ZZZZ�ZZZ�ƛn2ZZ�N�� �e���տ �Z� ��Ze �����e�NnZ�e���N��eeZee2eeZZeeZZ�Z2N��N���N�����ƿ �oenZ�����ZZeZZZZeZeeeZ
77+
ZZZZZZZZZZN��eeNƦ �� ���� o� o�2� ��n�������n�ZnNNno��oZ�ZeZZe�ZZZZZ�N�������ƿe��Ʀ �� �� ��NZeeeeeeeeZe
78+
ZZZ��ZZZZZN�2eNo � � ����oZN� o Z�n nZn� NZ�o e�N2�Ne2�տ���o�ZZZN2NN������ � e� � �տ���e�n�on��o�������������
79+
ZZZZZZZZZZ�Nnen ��� � ��n���2 �NZ��o�� 2NNe2e�����N�ZZ�nn��n���������� oooo� o2oo�Zo ��2զ�eoon�Zo��
80+
ZZZZZZZZZZZ�Z� ����� � �����n��NeNN��տ�ooN�Z�eZZ�en���������������n ��oo�� oo��onn��ƛ � �o2n nono��2�ƿ
81+
ZZZZZZZZZZZZ�� �o�oo��� � ������oZ��N���o�� ������no�n��noooon�nn2n��՛Z � n�2Zoeeo2�Z� �
82+
������������NN� ���oooo�� �� � �������o� ���n��o���o�����o��o�o�������onnnnnn�o�N�� � 2�� �oe�2eo��
83+
����������������ƛ �����o�o��� ���n��oo��oo���n��ooo��n �nn������� ���� �e22oo oZ� �ZNN2o���n�o2ne�e����
84+
��� ��������� � ������on�o��� �����������o������ ����onnnnonn222nZeno���on2��ƛ oe�2n �o�ZnoZe� �
85+
n�� ����o��n� ��������onoeee2e2nnon�����o��������������� �22e22n22nn22� ��2o 2�����e�o2eZZZ�2�n�nooen2��
86+
N�������������������Ʀ ��o������ � �noneZ��ZZno���o ���� ��������o�oo� e�Zeen22e222n�����������e� ee2no22՛��o�oo�eZZn� ��
87+
ZZeeZeeZeZZeZZeZ�eeN�� ������� �������� �������oo2nooon2nnn22n�Z�e22Z2n2o���������Ze2n�oo�� ��Zn�o�oon� noo22Zn��e�
88+
ZZZZZZZZZZZZeZZZZN������ �����nno ��oo��ooo2ne2n222nnnneeeno�ZZe2o�����oZ�N�2n�o�����o������N�N�NZZeZ� �oNn�o���e
89+
Z����Z�ZZZZ���Z���o ��NN�Z �ono�oeo ��n���n��ooonnnno222eZnoonZo��������2��nnnno2noooonoe2n�� � ZeZ�N�������N�n��
90+
�ZZZZZ�ZZZZZZ�N�� enoe�� o22ooo2e� � �����22nn2nnnn2222��nno� ��� ��ZN�2no��o������oo������� Z�N��Ze���N�� ���no2�
91+
�N���Z�Z�NNNNNN�e N�N���eƿ o2o���n2e2on�onoone2eeZonno���o�� ��������n2��N���e2e2o��no�o���oo����o����N��eeZ��n� �n�� n �� o
92+
N�ZZ���N� �� ����e�o���� �on22nooo22nno�ooon22o��o22�� ��o����on2nZN��Znnoonnoonoonn�� ���� � �2e���ƛ �
93+
N�ZZZ�ZNe NN�� �NNNNNN�e����ƛ �n22nnn2Z�Z2�����onno� �� o����2� �oo����n�NNN��Ze2n22nno����N�e ��N�ZZn2n��n� �
94+
�����Z��Ne NZo� �� ����n��N��ƿ ����� ��������N��������o ooo������o2eZZe2�n��N�nn2eee22n2eeNNZ e�o�����Z��
95+
2NNZZ��Ne NNZ� Z�N �NN� Z�n2Zn�N���������������n �e�����������N��������ZZ��������2 ��n���� Z��e� 2��Z��e��Z��Z����N��������N�
96+
e�NeZZ��N � ��N NNo �Ʀ2o�NZZZ���N��NN�����������������������������������ZZZZ���������2� � ���oo�� �� ZN����ZZ�ZZ
97+
Z�N�����NNNN� ��N� NNe �e�2��ee�Z�����N��NNNNNN�����������������������������������ZeZNN�������������N����NNNNNNNN�N�2eNNN�Z��������
98+
oo�ooo������ �o n� � �����������oooo��o�o��������������������������� �����22on2n2�ono�oZ���������on2no����
99+
100+
*/
101+
102+
-- sp_invoke_rest_endpoint (ExternalHTTP.sql)
103+
-- CREATE EXTERNAL MODEL | AI_GENERATE_EMBEDDINGS (AI.sql)
104+
-- vector data type (AI.SQL)
105+
-- Copilot no SSMS
106+
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
use master
2+
go
3+
4+
-- É um SQL 25 mesmo?
5+
SELECT @@VERSION,SERVERPROPERTY('ProductVersion'),SERVERPROPERTY('Edition')
6+
7+
8+
-- Banco de Testes!
9+
if DB_ID('PowerLive') IS NOT NULL
10+
EXEC('ALTER DATABASE PowerLive SET READ_ONLY WITH ROLLBACK IMMEDIATE; drop database PowerLive')
11+
GO
12+
13+
CREATE DATABASE PowerLive;
14+
GO
15+
16+
USE PowerLive
17+
GO
18+
19+
20+
--- vector data type!
21+
-- https://iatalk.ing/ia-sql-server-embeddings/
22+
-- https://www.red-gate.com/simple-talk/databases/sql-server/t-sql-programming-sql-server/ai-in-sql-server-2025-embeddings/
23+
24+
DECLARE -- Veiculo,Pessoa
25+
@carro vector(2) = '[1,0]'
26+
,@onibus vector(2) = '[1,0]'
27+
,@rainha vector(2) = '[0,1]'
28+
29+
SELECT
30+
[Carro Vs Onibus] = VECTOR_DISTANCE('cosine',@carro,@onibus)
31+
,[Carro Vs Rainha] = VECTOR_DISTANCE('cosine',@carro,@rainha)
32+
,[Onibus Vs Rainha] = VECTOR_DISTANCE('cosine',@onibus,@rainha)
33+
34+
35+
36+
-- Em tabela, mesma coisa!
37+
DROP TABLE IF EXISTS ExemploVector ;
38+
CREATE TABLE ExemploVector(
39+
embeddings vector(5)
40+
)
41+
42+
insert into ExemploVector values
43+
('[-1,-0.123,0,1.1,0.111]')
44+
,('[0,0,0,0,0]')
45+
,('[1,1,1,1,1]')
46+
47+
48+
select
49+
*
50+
from ExemploVector
51+
52+
53+
-- Como gera os embeddings? APIs
54+
-- Invocando diretamente uma API...
55+
56+
create master key encryption by password = 'LuizLindo@2025'
57+
58+
59+
-- Exemplos...
60+
-- OpenAI
61+
62+
-- primeiro criar a credential!
63+
-- https://platform.openai.com/api-keys
64+
create database scoped credential [https://api.openai.com]
65+
with Identity = 'HTTPEndpointHeaders', SECRET = '{"Authorization":"Bearer "}'
66+
67+
68+
-- gerar os embeddings!
69+
declare @result nvarchar(max)
70+
exec sp_invoke_external_rest_endpoint
71+
@url = 'https://api.openai.com/v1/embeddings'
72+
,@credential = 'https://api.openai.com'
73+
,@payload = '{
74+
"input":"Um carro"
75+
,"model":"text-embedding-3-small"
76+
,"dimensions":1024
77+
}'
78+
,@response = @result output
79+
80+
select * From openjson(@result)
81+
select convert(vector(1024),(JSON_QUERY(@result,'$.result.data[0].embedding')))
82+
83+
-- ollama
84+
-- https://github.com/ollama/ollama/blob/main/docs/api.md#generate-embeddings
85+
-- http://localhost:11434
86+
-- https://localhost:11443
87+
88+
declare @result nvarchar(max)
89+
exec sp_invoke_external_rest_endpoint
90+
@url = 'https://localhost:11443/api/embed'
91+
,@payload = '{
92+
"input":"Um carro"
93+
,"model":"nomic-embed-text"
94+
}'
95+
,@response = @result output
96+
97+
select * From openjson(@result)
98+
select convert(vector(768),(JSON_QUERY(@result,'$.result.embeddings[0]')))
99+
100+
101+
102+
--- E, se tiver um monte de dados em uma tabela?
103+
104+
-- Vamos popular com alguns artigos do blog TheSqlTimes
105+
declare @PostsJson nvarchar(max)
106+
exec sp_invoke_external_rest_endpoint 'https://thesqltimes.com/blog/wp-json/wp/v2/posts?_fields=id,title,excerpt,tags,link&per_page=100'
107+
,@response = @PostsJson output
108+
,@method = 'GET'
109+
110+
drop table if exists posts;
111+
112+
select
113+
*
114+
into
115+
posts
116+
from
117+
openjson(@PostsJson,'$.result') with (
118+
id int
119+
,titulo nvarchar(500) '$.title.rendered'
120+
,resumo nvarchar(1000) '$.excerpt.rendered'
121+
,link varchar(500)
122+
)
123+
124+
select * from posts
125+
126+
127+
-- MAIS FÁCIL: Gerando embeddings usando external model!
128+
-- external model: https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-model-transact-sql?view=sql-server-ver17
129+
130+
-- criando a "referencia" para o modelo!
131+
-- como preparar e configurar o ollama com o sql na sua maquina: https://thesqltimes.com/blog/2025/11/27/configurando-o-sql-2025-com-ollama-no-mesmo-pc-localhost/
132+
if exists(select * From sys.external_models where name = 'Ollama')
133+
drop external model Ollama;
134+
135+
136+
create external model Ollama
137+
with (
138+
LOCATION = 'https://localhost:11443/api/embed'
139+
,API_FORMAT = 'ollama'
140+
,MODEL_TYPE = EMBEDDINGS
141+
,MODEL = 'nomic-embed-text'
142+
)
143+
144+
145+
-- NOVA FUNÇÃO: AI_GENERATE_EMBEDDINGS
146+
-- https://learn.microsoft.com/en-us/sql/t-sql/functions/ai-generate-embeddings-transact-sql?view=sql-server-ver17
147+
select
148+
AI_GENERATE_EMBEDDINGS('Um carro' use model Ollama)
149+
150+
151+
-- Agora fica fácil!
152+
select top 5
153+
*
154+
,AI_GENERATE_EMBEDDINGS(resumo use model Ollama)
155+
from
156+
posts
157+
158+
-- Vamos atualizar!
159+
ALTER TABLE posts ADD embeddings vector(768)
160+
161+
-- dica: em producao, nao fazer tudo de uma vez em 1 transacao só, obviamente!
162+
update posts
163+
set embeddings = AI_GENERATE_EMBEDDINGS(resumo use model Ollama)
164+
165+
-- curiosidade: gpu, wait_types
166+
167+
168+
-- Realizando uma busca!
169+
170+
declare @Busca vector(768) = AI_GENERATE_EMBEDDINGS('resolver error no linux' use model Ollama)
171+
-- resolver error no linux
172+
-- encontrar o texto dos objetos
173+
174+
select top 10
175+
*
176+
,CosDistance = VECTOR_DISTANCE('cosine',@Busca,embeddings)
177+
from
178+
posts
179+
order by
180+
CosDistance
181+
182+
183+
--- VECTOR INDEX!
184+
-- https://learn.microsoft.com/en-us/sql/relational-databases/vectors/vectors-sql-server?view=sql-server-linux-ver17
185+
-- https://learn.microsoft.com/en-us/sql/t-sql/statements/create-vector-index-transact-sql?view=sql-server-ver17
186+
-- https://learn.microsoft.com/en-us/sql/t-sql/functions/vector-search-transact-sql?view=sql-server-ver17
187+
-- veja o plano...
188+
--- scan... , tabela de milhoes de linhas isso é um prob!
189+
-- tf:
190+
191+
-- DiskANN
192+
--- index: ajuda a achar mais rapido!
193+
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;
194+
alter table posts alter column id int not null
195+
alter table posts add constraint pkPosts primary key(id)
196+
create vector index ixVec1 on posts(embeddings)
197+
with (metric = 'cosine',type='DiskANN')
198+
199+
200+
-- nova função: VECTOR_SEARCH
201+
declare @Busca vector(768) = AI_GENERATE_EMBEDDINGS('posts relacionados a backup' use model Ollama)
202+
203+
SELECT
204+
*
205+
FROM
206+
VECTOR_SEARCH (
207+
table = posts
208+
,column = embeddings
209+
,similar_to = @Busca
210+
,metric = 'cosine'
211+
,top_n = 10
212+
)
213+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
pequeno exemplo de como a ai_generate_chunks funciona!
3+
*/
4+
5+
use PowerLive
6+
go
7+
8+
select
9+
*
10+
from
11+
(select 'abcdef' as texto) t
12+
cross apply
13+
ai_generate_chunks(source=texto, chunk_type = fixed, chunk_size = 2, overlap = 50, enable_chunk_set_id =1) c
14+
15+
16+
17+
18+
19+
select
20+
p.id,p.titulo,p.resumo
21+
,c.*
22+
from
23+
posts p
24+
cross apply
25+
ai_generate_chunks(source=resumo, chunk_type = fixed, chunk_size = 10, overlap = 50, enable_chunk_set_id =1) c
26+
where
27+
id = 3

0 commit comments

Comments
 (0)