¡Hola, chicos! ¿Cómo estás?

Recientemente tuve el placer de participar de una sensacional transmisión en vivo por el canal .NET con el maestro Renato Groff, donde profundizamos de lleno en lo más moderno en Inteligencia Artificial aplicada a Bases de Datos.

Si pensaba que la IA era sólo para desarrolladores front-end o científicos de datos, prepárese: el juego ha cambiado y SQL Server 2025 está aquí para demostrarlo.

En esta publicación, resumiré los puntos principales que creamos en vivo, enfocándonos en la integración nativa de SQL Server con Azure Open AI y cómo monitorear todo esto con OpenTelemetry y Grafana.

 

El salto a SQL Server 2025

La gran estrella de la noche fue el anuncio de las capacidades del SQL Server 2025 (vista previa pública). Microsoft finalmente trajo a “on-premises” (y a SQL Database) una característica que anteriormente dependía de soluciones complejas o CLR: la ejecución nativa de llamadas REST.

A través del procedimiento del sistema. sp_invoke_external_rest_endpoint, ahora podemos comunicarnos con cualquier API, incluida Azure Open AI, sin salir de nuestra consulta.

El uso de CLR (Common Language Runtime) sigue siendo una alternativa para versiones anteriores (como 2017 o 2019), pero el rendimiento y la seguridad del soporte nativo en SQL 2025 no tienen comparación.

Arquitectura de integración: Azure Open AI

Para que esta magia suceda, utilizamos el modelo. GPT-4o mini. ¿Por qué el “mini”? Simple: Costo-Beneficio. Es absurdamente más barato que el GPT-4o completo (entre 20 y 30 veces menos) y ofrece una precisión excelente para tareas de bases de datos, como generar comandos T-SQL o resumir registros.

Seguridad: uso de credenciales con ámbito de base de datos para evitar fugas de credenciales

Como profesional Senior, lo primero que pienso es: “¿Voy a exponer mi API Key en texto claro?”. Nunca.

Una buena práctica aquí es utilizar el Credenciales con alcance de base de datos: Creamos una credencial que almacena el token de autorización, de modo que el desarrollador que llama al procedimiento no tiene acceso a la clave API, solo al nombre de la credencial.

Importante: Antes de crear credenciales, debe habilitar Llave maestra en la base de datos para garantizar el cifrado de secretos.

El script: convertir SQL Server en un DBA virtual

A continuación, te presento el script completo para configurar esta integración y crear un procedimiento que interprete el lenguaje natural y ejecute comandos en tu base de datos.

-- Cria a masterkey do banco
IF NOT EXISTS(SELECT * FROM sys.symmetric_keys WHERE [name] = '##MS_DatabaseMasterKey##') 
BEGIN
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'LONg_Pa$$_w0rd!'
END
GO


-- Cria as credenciais
IF EXISTS(SELECT * FROM sys.database_scoped_credentials WHERE [name] = 'https://dirceu-openai.openai.azure.com')
BEGIN
    DROP DATABASE SCOPED CREDENTIAL [https://dirceu-openai.openai.azure.com]
END;


DECLARE 
    @Query VARCHAR(MAX)


SET @Query = 'CREATE DATABASE SCOPED CREDENTIAL [https://dirceu-openai.openai.azure.com] WITH IDENTITY = ''HTTPEndpointHeaders'', SECRET = ''{"Authorization": "Bearer ' + CONVERT(VARCHAR(MAX), 'Chave_API_AQUI')  + '"}'''
EXEC(@Query)


CREATE OR ALTER PROCEDURE dbo.stpExecuta_SQL_IA (
    @Prompt VARCHAR(MAX),
    @Fl_Debug BIT = 0
)
AS 
BEGIN

    -- Executa a API
    DECLARE
        @ret INT,
        @response NVARCHAR(MAX),
        @payload VARCHAR(MAX) = '{
      "messages": [
        {
          "role": "system",
          "content": [
            {
              "type": "text",
              "text": "Essas são as instruções básicas para você: Você é um DBA SQL Server. Tudo que eu te perguntar, você deve responder apenas com comandos T-SQL. NUNCA, JAMAIS, EM NENHUMA HIPÓTESE, VOCÊ DEVERÁ ME RESPONDER COM QUALQUER MENSAGEM OU NENHUM CARACTERE QUE NÃO SEJA PARTE DE UM CÓDIGO T-SQL. Se limite a responder apenas o que eu perguntar, com comandos T-SQL. Se não for possível responder ou for uma pergunta que não faça sentido do ponto de vista de um banco SQL Server, não responda nada, retorne vazio. O que eu quero saber é: ' + @Prompt + '"
            }
          ]
        }
      ],
      "temperature": 0.7,
      "top_p": 0.95,
      "max_tokens": 8000
    }'

    EXEC @ret = sys.sp_invoke_external_rest_endpoint 
	    @method = 'POST',
	    @url = N'https://dirceu-openai.openai.azure.com/openai/deployments/gpt-4o-mini/chat/completions?api-version=2025-01-01-preview',
	    @payload = @payload,
            @credential = [https://dirceu-openai.openai.azure.com],
	    @response = @response OUTPUT

    -- PRINT @response


    DECLARE @retorno VARCHAR(MAX)
    
    SET @retorno = JSON_VALUE(@response, '$.result.choices[0].message.content')


    SET @retorno = REPLACE(REPLACE(@retorno, '```sql', ''), '```', '')

    PRINT @retorno

    IF (LEN(TRIM(@retorno)) > 0 AND @Fl_Debug = 0)
        EXEC(@retorno)

END


-- EXEC dbo.stpExecuta_SQL_IA 'Quero criar uma tabela chamada Clientes com os campos nome, cpf e idade. Se a tabela já existir, pode excluir.'


-- EXEC dbo.stpExecuta_SQL_IA 'Quero criar uma tabela chamada Clientes com os campos nome, cpf e idade. Se a tabela já existir, pode excluir.'
-- EXEC dbo.stpExecuta_SQL_IA 'Na minha tabela de Clientes, que tem os campos nome, cpf (char(11)) e idade, insere 50 registros.'
-- EXEC dbo.stpExecuta_SQL_IA 'Retorne as colunas nome e idade da minha tabela de clientes'
-- EXEC dbo.stpExecuta_SQL_IA 'Retorne os dados da minha tabela de clientes onde a idade seja igual a 36'
-- EXEC dbo.stpExecuta_SQL_IA 'Retorne os dados da minha tabela de clientes onde a idade seja igual a 36 ou 38 ou 40'
-- EXEC dbo.stpExecuta_SQL_IA 'Retorne os dados da minha tabela de clientes onde a idade seja igual a 36 ou 38 ou 40 e o final do cpf termine com um número par'

-- EXEC dbo.stpExecuta_SQL_IA 'Quero criar uma tabela com de clientes com os campos nome, cpf e idade. Se a tabela já existir, pode excluir. Insere 50 registros nessa tabela e retorna os dados', @Fl_Debug = 0

Observabilidad y seguimiento

No basta con integrarse, hay que monitorearlo. Durante la demostración, Renato Groff mostró cómo Núcleo semántico y el OpenTelemetría son vitales.

Cuando SQL Server realiza una llamada a la IA, generamos fichas. Estos tokens cuestan dinero. Al instrumentar la aplicación con Grafana y Aloy, pudimos capturar:

  • Tokens de entrada frente a tokens de salida: ¿Cuánto estamos gastando por pregunta?
  • Tipos de espera: Supervise la latencia de la red en la llamada API (tenga cuidado con las esperas de la red que pueden bloquear a los trabajadores de SQL).
  • ID de seguimiento: Vincular la pregunta del usuario en el front-end con la consulta generada por IA en la base de datos.
ALERTA CRÍTICA: Dar permiso a una IA para ejecutar comandos SQL dinámicos (EXEC sp_executesql) abre agujeros para la inyección rápida. Utilice siempre usuarios con el principio de privilegio mínimo (solo SELECCIONAR en tablas específicas) y nunca ejecute esto en producción sin un regulador de recursos configurado para limitar la CPU/memoria para estas consultas.

Tabla de referencia: límites y tokens

Para ayudar con la planificación de costos, aquí hay una estimación simplificada para el modelo mini GPT-4o:

Modelo Costo de entrada (1 millón de tokens) Costo de producción (1 millón de tokens) Uso recomendado
GPT-4o $5.00 $15.00 Lógica compleja y análisis de errores.
GPT-4o mini $0.15 $0.60 Consultas SQL simples y resúmenes.

Rendimiento e impacto

Al usar el sp_invoke_external_rest_endpoint, SQL Server administra la conexión HTTP de forma asincrónica internamente, pero la sesión del usuario está en espera hasta que regresa la API. En entornos altamente competitivos, esto puede aumentar los contadores de espera externa.

El consejo es utilizar esta funcionalidad para tareas en segundo plano, BI o herramientas administrativas, evitando el flujo principal de registro de transacciones (OLTP).

 

Espero que te haya gustado este tip, un fuerte abrazo y ¡hasta la próxima!