> ## 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

> 将 Microsoft SQL Server 的自定义事件同步到 OneSignal，基于用户行为触发自动化 Journey 和个性化消息活动。

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"

## 概览

OneSignal + SQL Server 集成能够将您的 Microsoft SQL Server 数据库中的自定义事件同步到 OneSignal，以基于用户行为触发自动化消息活动和 Journey。

SQL Server 是微软的关系数据库管理系统，专为企业应用程序和数据仓库而设计。

***

## 要求

* 访问自定义事件（目前处于测试阶段）
* [升级账户计划](https://onesignal.com/pricing)（免费应用不可用）。

### SQL Server

* 具有网络访问权限的 **SQL Server 实例**
* 具有适当权限的**数据库用户**
* 包含结构化行为数据的**事件表**
* 从 OneSignal 到您的 SQL Server 实例的**网络连接**

***

## 设置

<Steps>
  <Step title="为 OneSignal 创建专用用户">
    创建具有强大、唯一密码的专用用户账户：

    ```sql theme={null}
    -- Create census user with the ability to sign in with a password
    CREATE USER CENSUS WITH PASSWORD = '<strong-unique-password>';

    -- Give the census user the ability to connect to database
    GRANT CONNECT TO CENSUS;
    ```

    <Info>
      所有 SQL Server 命令将在运行脚本时指定的数据库内运行。
    </Info>
  </Step>

  <Step title="授予读取权限">
    为您的事件数据提供只读访问权限：

    ```sql theme={null}
    -- Give the census user the ability to read tables within the database
    EXEC sp_addrolemember 'db_datareader', CENSUS;

    -- Grant census user ability to read data from within a schema
    -- Run this for each schema you intend OneSignal to access
    GRANT SELECT, VIEW DEFINITION ON SCHEMA::<your-schema> TO CENSUS;
    ```

    <Info>
      将 `<your-schema>` 替换为包含事件数据的实际架构名称。对于您希望 OneSignal 访问的每个架构，重复此命令。
    </Info>
  </Step>

  <Step title="配置高级同步引擎（可选）">
    为提高性能，为 OneSignal 的同步状态创建记账架构：

    ```sql theme={null}
    -- Create a private bookkeeping schema where Census can store sync state
    CREATE SCHEMA CENSUS AUTHORIZATION CENSUS;

    -- Give the census user full access to the bookkeeping schema
    GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
              UPDATE, VIEW DEFINITION ON SCHEMA::CENSUS TO CENSUS;

    -- Give the census user the ability to create tables within the database
    GRANT CREATE TABLE TO CENSUS;
    ```

    <Warning>
      如果使用基本同步引擎或只读模式，请跳过此步骤。
    </Warning>
  </Step>

  <Step title="连接到 OneSignal">
    在 OneSignal 中，前往 **数据 > 集成**，然后点击 **添加集成**。

    选择 **SQL Server** 并提供以下连接详细信息：

    * \*\*主机：\*\*您的 SQL Server 实例主机名或 IP 地址
    * \*\*端口：\*\*1433（默认）或您的自定义端口
    * \*\*数据库：\*\*您的数据库名称
    * **用户名：**`CENSUS`
    * \*\*密码：\*\*步骤 1 中的密码
  </Step>
</Steps>

***

### 事件数据映射

将您的 {PLATFORM_0} {DATA_TYPE_0} 映射到 OneSignal 的自定义事件格式：

| OneSignal 字段  | {COLUMN_HEADER_0} | 描述                         | 必需 |
| ------------- | ----------------- | -------------------------- | -- |
| `name`        | `event_name`      | 事件标识符                      | 是  |
| `external_id` | `user_id`         | 用户标识符                      | 是  |
| `timestamp`   | `event_timestamp` | 事件发生时间                     | 否  |
| `properties`  | `event_data`      | {PROPERTIES_DESCRIPTION_0} | 否  |

### 示例事件表架构

```sql theme={null}
-- Example SQL Server event table
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)
);
```

### SQL 查询模式

编写自定义 SQL 查询来转换您的事件数据：

```sql theme={null}
-- Example: Recent high-value events
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;
```

***

## 高级网络配置

OneSignal 可以成功连接到使用高级网络控制的 SQL Server 实例，包括地区限制、IP 地址允许列表或 SSH 隧道。

有关配置网络访问的更多信息，请联系您的 SQL Server 管理员或 OneSignal 支持。

***

## 同步引擎选项

### 基本同步引擎

* 对您的事件数据的只读访问
* 由 OneSignal 基础设施管理的状态跟踪
* 使用最少权限的简单设置

### 高级同步引擎

* 通过本地状态跟踪提升性能
* 需要额外权限来创建表
* 推荐用于高容量事件处理

***

## 限制

* 复杂查询可能在高流量期间影响数据库性能
* JSON 操作需要 SQL Server 2016 或更高版本以获得最佳性能
* 所有权限都在设置期间指定的数据库级别授予

***

## 常见问题

### 我可以连接到多个 SQL Server 架构吗？

可以，您可以通过为包含事件数据的每个架构运行 `GRANT SELECT, VIEW DEFINITION ON SCHEMA::<schema>` 语句来授予 CENSUS 用户访问多个架构的权限。

### 支持哪些 SQL Server 版本？

OneSignal 支持现代 SQL Server 版本。对于事件查询中的 JSON 操作，建议使用 SQL Server 2016 或更高版本。

### 我需要使用高级同步引擎吗？

不需要，基本同步引擎适用于大多数用例。如果您需要增强性能并且可以允许 OneSignal 在您的 SQL Server 实例中创建表，请使用高级同步引擎。
