> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SQL Server

> Sincroniza eventos personalizados desde Microsoft SQL Server a OneSignal para activar Journeys automatizados y campañas de mensajería personalizadas basadas en el comportamiento del usuario.

export const PLATFORM_0 = "SQL Server"

export const DATA_TYPE_0 = "event data"

export const COLUMN_HEADER_0 = "SQL Server Column"

export const PROPERTIES_DESCRIPTION_0 = "Event metadata as JSON string"

## Descripción general

La integración OneSignal + SQL Server habilita la sincronización de eventos personalizados desde tu base de datos Microsoft SQL Server a OneSignal para activar campañas de mensajería automatizadas y Journeys basados en el comportamiento del usuario.

SQL Server es el sistema de gestión de base de datos relacional de Microsoft diseñado para aplicaciones empresariales y almacenamiento de datos.

***

## Requisitos

* Access to [Event Streams](/docs/en/event-streams) for outbound message events (Plan limitations and overages apply)
* Access to [Custom Events](/docs/en/custom-events) for inbound event syncing (Plan limitations and overages apply)
* [Updated Account Plan](https://onesignal.com/pricing) (not available on free apps)

### SQL Server

* **Instancia de SQL Server** con acceso de red
* **Usuario de base de datos** con permisos apropiados
* **Tablas de eventos** conteniendo datos de comportamiento estructurados
* **Conectividad de red** desde OneSignal a tu instancia de SQL Server

***

## Configuración

<Steps>
  <Step title="Crear usuario dedicado para OneSignal">
    Crea una cuenta de usuario dedicada con una contraseña fuerte y única:

    ```sql theme={null}
    -- Crear usuario census con la capacidad de iniciar sesión con contraseña
    CREATE USER CENSUS WITH PASSWORD = '<strong-unique-password>';

    -- Dar al usuario census la capacidad de conectarse a la base de datos
    GRANT CONNECT TO CENSUS;
    ```

    <Info>
      Todos los comandos de SQL Server se ejecutarán dentro de la base de datos que se especifica al ejecutar el script.
    </Info>
  </Step>

  <Step title="Otorgar permisos de lectura">
    Proporciona acceso de solo lectura a tus datos de eventos:

    ```sql theme={null}
    -- Dar al usuario census la capacidad de leer tablas dentro de la base de datos
    EXEC sp_addrolemember 'db_datareader', CENSUS;

    -- Otorgar al usuario census capacidad de leer datos dentro de un esquema
    -- Ejecuta esto para cada esquema que pretendes que OneSignal acceda
    GRANT SELECT, VIEW DEFINITION ON SCHEMA::<your-schema> TO CENSUS;
    ```

    <Info>
      Reemplaza `<your-schema>` con el nombre real de tu esquema que contiene datos de eventos. Repite este comando para cada esquema al que quieras que OneSignal acceda.
    </Info>
  </Step>

  <Step title="Configurar Motor de Sincronización Avanzado (Opcional)">
    Para rendimiento mejorado, crea un esquema de contabilidad para el estado de sincronización de OneSignal:

    ```sql theme={null}
    -- Crear un esquema de contabilidad privado donde Census puede almacenar el estado de sincronización
    CREATE SCHEMA CENSUS AUTHORIZATION CENSUS;

    -- Dar al usuario census acceso completo al esquema de contabilidad
    GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
              UPDATE, VIEW DEFINITION ON SCHEMA::CENSUS TO CENSUS;

    -- Dar al usuario census la capacidad de crear tablas dentro de la base de datos
    GRANT CREATE TABLE TO CENSUS;
    ```

    <Warning>
      Omite este paso si usas el Motor de Sincronización Básico o modo de solo lectura.
    </Warning>
  </Step>

  <Step title="Conectar a OneSignal">
    In OneSignal, go to **Data > Integrations** and click **Add Integration**.

    Selecciona **SQL Server** y proporciona los siguientes detalles de conexión:

    * **Host:** El nombre de host o dirección IP de tu instancia de SQL Server
    * **Port:** 1433 (predeterminado) o tu puerto personalizado
    * **Database:** El nombre de tu base de datos
    * **Username:** `CENSUS`
    * **Password:** La contraseña del Paso 1
  </Step>
</Steps>

***

### Event data mapping

Map your {PLATFORM_0} {DATA_TYPE_0} to OneSignal's custom events format:

| OneSignal Field | {COLUMN_HEADER_0} | Description                | Required |
| --------------- | ----------------- | -------------------------- | -------- |
| `name`          | `event_name`      | Event identifier           | Yes      |
| `external_id`   | `user_id`         | User identifier            | Yes      |
| `timestamp`     | `event_timestamp` | When event occurred        | No       |
| `properties`    | `event_data`      | {PROPERTIES_DESCRIPTION_0} | No       |

### Ejemplo de esquema de tabla de eventos

```sql theme={null}
-- Ejemplo de tabla de eventos de SQL Server
CREATE TABLE analytics.user_events (
    event_id BIGINT IDENTITY(1,1) PRIMARY KEY,
    event_name NVARCHAR(100) NOT NULL,
    user_id NVARCHAR(255) NOT NULL,
    event_timestamp DATETIME2 DEFAULT GETUTCDATE(),
    event_data NVARCHAR(MAX),
    session_id NVARCHAR(255),
    device_type NVARCHAR(50)
);
```

### Modo de consulta SQL

Escribe consultas SQL personalizadas para transformar tus datos de eventos:

```sql theme={null}
-- Ejemplo: Eventos recientes de alto valor
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_data
FROM analytics.user_events
WHERE event_timestamp >= DATEADD(day, -7, GETUTCDATE())
    AND JSON_VALUE(event_data, '$.value') > 100
ORDER BY event_timestamp DESC;
```

***

## Configuración de red avanzada

OneSignal puede conectarse exitosamente a instancias de SQL Server que están usando controles de red avanzados incluyendo restricciones de región, listas de permitidos de direcciones IP o Túnel SSH.

Para más información sobre configurar acceso de red, contacta a tu administrador de SQL Server o soporte de OneSignal.

***

## Opciones de motor de sincronización

### Motor de Sincronización Básico

* Acceso de solo lectura a tus datos de eventos
* Seguimiento de estado gestionado por infraestructura de OneSignal
* Configuración más simple con permisos mínimos

### Motor de Sincronización Avanzado

* Rendimiento mejorado con seguimiento de estado local
* Requiere permisos adicionales para crear tablas
* Recomendado para procesamiento de eventos de alto volumen

***

## Limitaciones

* Las consultas complejas pueden impactar el rendimiento de la base de datos durante períodos de alto tráfico
* Las operaciones JSON requieren SQL Server 2016 o posterior para rendimiento óptimo
* Todos los permisos se otorgan a nivel de base de datos especificado durante la configuración

***

## FAQ

### ¿Puedo conectarme a múltiples esquemas de SQL Server?

Sí, puedes otorgar al usuario CENSUS acceso a múltiples esquemas ejecutando la declaración `GRANT SELECT, VIEW DEFINITION ON SCHEMA::<schema>` para cada esquema que contiene datos de eventos.

### ¿Qué versiones de SQL Server están soportadas?

OneSignal soporta versiones modernas de SQL Server. Para operaciones JSON en consultas de eventos, se recomienda SQL Server 2016 o posterior.

### ¿Necesito usar el Motor de Sincronización Avanzado?

No, el Motor de Sincronización Básico funciona bien para la mayoría de los casos de uso. Usa el Motor de Sincronización Avanzado si necesitas rendimiento mejorado y puedes permitir que OneSignal cree tablas en tu instancia de SQL Server.
