# Microsoft SQL Server

本主题介绍如何使用 Microsoft SQL Server 目标连接器配置与 Microsoft SQL Server 目标的连接。

Microsoft SQL Server 目标既可以用于数据管道，也可以用于复制任务。在数据管道中，可以在目标平台上执行各种 ELT 操作，包括存储数据、转换数据、创建数据集市和注册数据。另一方面，复制任务涉及将数据直接从源系统复制到具有基本转换功能的目标系统，但不支持 ELT 操作。在连接到 Microsoft SQL Server 目标之前，您需要在数据库上配置 [用户先决条件](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/sqlserver-target.htm#Permissi)。如果您通过 数据移动网关 连接到 Microsoft SQL Server，还需要安装驱动程序，如 [驱动程序设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/sqlserver-target.htm#Driver) 中所述。

有关使用 Microsoft SQL Server Target 连接器时的限制和注意事项的信息，请参阅[限制和考虑事项](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/sqlserver-target.htm#Limitati)。

## 设置连接属性

要配置连接器，请执行以下操作：

1. 在连接中单击创建连接。

2. 选择 Microsoft SQL Server 目标连接器，然后提供以下设置：

### 数据移动网关

信息注释如果您有 Qlik Talend Cloud Standard 订阅，则数据网关字段将不可用，因为此订阅级别不支持 数据移动网关。

Microsoft SQL Server 既可以用作数据管道中的目标，也可以用于复制任务。虽然访问管道中的 Microsoft SQL Server 目标可能需要 数据移动网关 （取决于是否可以直接从 Qlik Cloud 访问数据库），但在复制任务中使用 Microsoft SQL Server 对象时，始终需要该网关。

信息注释通过 数据移动网关 访问目标数据库时，还需要在 数据移动网关 计算机上安装相应的驱动程序。有关详细信息，请参阅下文的[驱动程序设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/sqlserver-target.htm#Driver)。

#### 在数据管道中使用 Microsoft SQL Server 目标

信息注释此字段不适用于 Qlik Talend Cloud Starter 订阅，因为此订阅层不支持 数据移动网关。

只有当目标数据库无法从 Qlik Cloud 访问时（例如，如果它位于防火墙后面的内部部署或虚拟专用云中），才需要 数据移动网关，并且只能使用私有链接访问。如果是这种情况，请选择要通过其访问目标数据库的 数据移动网关。

根据您的使用情况，这将和从数据源移动数据时部署的 数据移动网关 相同，或者与之不同。

有关 数据移动网关 用例的信息，请参阅 [什么时候需要 数据移动网关？](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#top) 和 [常见用例](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#Common)。

信息注释需要 数据移动网关 2022.11.70 或更高版本。

如果可以从 Qlik Cloud 直接访问目标数据库，请选择无。

#### 在复制任务中使用 Microsoft SQL Server 目标

数据网关：选择将用于测试与 Microsoft SQL Server 目标的连接的 数据移动网关。这应该是用于访问数据源的同一网关。

信息注释

需要 数据移动网关 2023.5.10 或更高版本。

### 数据目标

* 云提供者：根据需要选择以下项之一：

  * 无（针对内部）
  * Amazon RDS
  * Google Cloud
  * Microsoft Azure（同时支持 Microsoft Azure 托管实例和 Microsoft Azure 数据库）

* 服务器：安装 Microsoft SQL Server 数据库的计算机的主机名或 IP 地址。

  信息注释

  * 要覆盖默认端口，请将端口添加到服务器名称中，并用逗号分隔。例如，如果服务器名称为 `myserver.company.local`，端口为 `3333`，则服务器名称应为：

    `myserver.company.local,3333`

### 帐户属性

用户名称和密码：经授权可访问 Microsoft SQL Server 数据库的用户的用户名和密码。

### 数据库属性

* 数据库名称：有两种方法可以用于指定数据库：

  * 方法 1 - 从列表中选择：此方法要求[在主数据库上创建用户](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/sqlserver-target.htm#Permissi)。单击加载数据库，然后选择一个数据库。
  * 方法 2 - 手动：选择手动输入数据库名称，然后输入数据库名称。

* 加密（信任服务器证书）：选择此项以在数据库服务器与 数据移动网关 之间，或者在 数据网关 设置为 无 时数据库服务器与 Qlik Cloud 之间加密通信。选中后，将自动信任服务器证书。

  * 证书中的主机名：要仅在服务器证书的主机名与此字段中指定的值匹配时才信任该证书，请输入服务器证书的主机名。

### 内部属性

内部属性用于特殊用例，因此不会在对话框中公开。只有在 Qlik 支持部门的指示下，您才应该使用它们。

使用字段右侧的 the 新建 icon 和 the 取消 icon 按钮可以根据需要添加或删除特性。

### 名称

连接的显示名称。

## 先决条件

### 用户先决条件

* 连接器设置中指定的用户必须至少具有目标 Microsoft SQL Server 数据库上的 `db_owner` 用户角色。
* 为了能够选择数据库（通过单击连接器对话框中的加载数据库），需要在主数据库上创建连接器设置中指定的用户。

### 驱动程序设置

只有通过 数据移动网关 访问数据库时才需要驱动程序。请参阅以上数据移动网关，以获取有关需要数据移动网关时的用例的更多信息。

您可以使用驱动程序安装实用程序（推荐）安装 driver 或手动安装。只有在您遇到驱动程序安装实用程序发生问题的少见情况下，才应尝试手动安装。

#### 使用驱动程序安装实用程序安装驱动程序

本部分介绍如何安装所需的 driver。这个过程包括运行一个脚本，该脚本将自动下载、安装和配置所需的 driver。您还可以根据需要运行脚本来更新和卸载 driver。

准备安装

* 请确保在 数据移动 网关服务器上安装了 Python 3.6 或更高版本。

  Python 预装在大多数 Linux 发行版上。您可以通过运行以下命令来检查系统上安装了哪个 Python 版本。

  python3 --version

安装 driver

下载并安装 driver ：

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

4. 然后运行以下命令：

   语法：

   ./install sqlserver

   如果无法下载 driver（由于访问限制或技术问题），将显示一条消息，为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后，请再次运行 install sqlserver 命令。

   否则，将显示 driver 的 EULA。

5. 执行以下选项之一：

   * 重复按 [Enter] 可在 EULA 中缓慢滚动。
   * 重复按空格键可快速滚动 EULA。
   * 按 q 退出许可证文本并显示 EULA 接受选项。

6. 执行以下选项之一：

   * 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。

   * 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。

   * 键入“v”并按 [Enter] 以再次查看 EULA。

   将会安装 driver。

7. 等待安装完成（以“完成！”指示），然后启动 数据移动网关 服务：

   sudo systemctl start repagent

8. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

更新 driver

如果要在安装提供的 driver 之前卸载以前版本的 driver，请运行 update 命令。

下载并更新 driver：

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

4. 然后运行以下命令：

   语法：

   ./update sqlserver

   如果无法下载 driver（由于访问限制或技术问题），将显示一条消息，为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后，请再次运行 update sqlserver 命令。

   否则，将显示 driver 的 EULA。

5. 执行以下选项之一：

   * 重复按 [Enter] 可在 EULA 中缓慢滚动。
   * 重复按空格键可快速滚动 EULA。
   * 按 q 退出许可证文本并显示 EULA 接受选项。

6. 执行以下选项之一：

   * 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。
   * 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。
   * 键入“v”并按 [Enter] 可从头开始查看 EULA。

   将卸载旧的 driver，并安装新的 driver。

7. 等待安装完成（以“完成！”指示），然后启动 数据移动网关 服务：

   sudo systemctl start repagent

8. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

卸载 driver

如果要卸载 driver，请运行 uninstall 命令。

卸载 driver：

1. 停止所有配置为使用此连接器的任务。

2. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

3. 然后运行以下命令：

   语法：

   ./uninstall sqlserver

   将卸载 driver。

#### 手动安装驱动程序

只有在自动驱动程序安装未成功完成的情况下，才应尝试手动安装 driver。

当使用 Microsoft SQL Server 作为目标时，需要同时安装 ODBC 驱动程序和 JDBC 驱动程序。

安装 ODBC 驱动程序

在安装 数据移动网关 后，下载 msodbcsql&lt;版本&gt;.x86\_64.rpm 驱动程序。您可以在此路径下面找到受支持版本的直接下载链接：binary-artifacts in /opt/qlik/gateway/movement/drivers/manifests/sqlserver.yaml。下载完成后，将 RPM 复制到 数据移动网关 机器上。

在 Data Movement gateway 服务器上，打开 shell 提示符并执行以下操作：

1. 停止 Data Movement gateway 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 安装驱动程序 (RPM)。

4. 将工作目录更改为 &lt;product\_dir&gt;/bin。

5. 如下将驱动程序位置复制到 `site_arep_login.sh` 文件：

   ```
   echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/opt/microsoft/msodbcsql<version>/lib64/" >> site_arep_login.sh
                           
   ```

   这将把驱动程序添加到 "LD\_LIBRARY\_PATH" 并更新驱动程序位置于 **site\_arep\_login.sh** 文件。

6. 可选择确认已将驱动程序位置复制：

   ```
   cat site_arep_login.sh
                           
   ```

7. 启动 Data Movement gateway 服务：

   sudo systemctl start repagent

8. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

9. Data Movement gateway 需要以下 ODBC 库：msodbcsql-18.1.so.1.1

   要检查当前安装的库版本，请发出以下命令：

   ```
   ls /opt/microsoft/msodbcsql<version>/lib64/
                           
   ```

   如果现有库有不同的版本号码（例如 libmsodbcsql-18.0.so.1.1），则需要在现有库和所需库之间创建符号链接。

   为此，请发出以下命令：

   ```
   cd /opt/microsoft/msodbcsql<version>/lib64/
                           
   ```

   ```
   ln -s existing_library_name msodbcsql-18.1.so.1.1
   ```

   此处 `existing_library_name` 是当前安装的库的名称（例如 libmsodbcsql-18.0.so.1.1）。

安装 JDBC 驱动程序

1. 下载 mssql-jdbc-&lt;version&gt;.jar 文件。您可以在此路径下面找到受支持版本的直接下载链接：binary-artifacts in /opt/qlik/gateway/movement/drivers/manifests/sqlserver.yaml。下载完成后，将 JAR 文件复制到 数据移动网关 计算机上的以下文件夹。

   /opt/qlik/gateway/movement/qcs\_agents/qdi-db-commands/lib

2. 通过运行[重新启动服务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/dm-gateway-managing.htm#Restarti2)中所述的命令重新启动 数据移动网关 服务

## 限制和考虑事项

### 在数据管道中使用时的限制和注意事项

* 在数据管道中将数据登陆到 Microsoft SQL Server 时，不支持实时视图。有关实时视图的更多信息，请参阅[存储数据集](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Storage/generating-datasets.htm)。

### 所有数据任务的限制和注意事项

如果以下大型对象类型在源数据库中为空（0 字节），则它们在满负载后不会为空：

* BLOB 将作为 0x0000（2 个字节）写入

* TEXT (VARCHAR(max)) 将作为 0X00（1 个字节）写入

* NTEXT (NVARCHAR(max)) 将作为 0x0000（2 个字节）写入

信息注释如果这些类型在更改处理过程中为空，则它们将以空（0 字节）的形式正确写入目标。

### 仅复制任务的限制和注意事项

* 批量优化应用模式不支持完整大小的 LOB 列。您可以通过[在任务设置中](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-metadata.htm)限制 LOB 列的大小或切换到[事务应用模式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-replication.htm#Apply)来绕过此限制。
* 如果同时启用[批量优化](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-replication.htm#Apply)应用和[复制受限 LOB 列（KB）](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-metadata.htm) 选项，则目标上的 BLOB 列将被截断为 将 LOB 列大小限制为字段中指定大小的四分之一，而 CLOB 列将被截断为指定大小的一半。。
* 如果需要复制 4 字节表情符号，请使用转换将数据类型从 STRING(n ) 转换为 WSTRING ( n\*2 )。

## 数据类型

本机数据类型信息将被保留，并显示在数据集视图的本机数据类型列中。如果列不可见，则需要打开数据集视图的列选择器，然后选择本机数据类型列。

支持的目标数据类型

| Qlik Cloud 数据类型 | Microsoft SQL Server 数据类型 |
| --- | --- |
| BOOLEAN | TINYINT |
| BYTES | **VARBINARY(length)** |
| DATE | DATE |
| TIME | TIME(0) |
| DATETIME | 如果小数位数为 0-7，则：<br><br>DATETIME2 (Scale)<br><br>如果小数位数超过 7，则：<br><br>DATETIME2 (7) |
| INT1 | **SMALLINT** |
| INT2 | **SMALLINT** |
| INT4 | **INT** |
| INT8 | **BIGINT** |
| NUMERIC | **NUMERIC(p,s)** |
| REAL4 | **REAL** |
| REAL8 | **FLOAT** |
| UINT1 | **INT2** |
| UINT2 | **INT4** |
| UINT4 | **INT8** |
| UINT8 | **NUMERIC(20)** |
| STRING | 如果列是日期或时间，则：<br><br>DATETIME2<br><br>如果列*不是*日期或时间：<br><br>**VARCHAR(length)** |
| WSTRING | **NVARCHAR(length)** |
| CLOB | **VARCHAR(max)**<br><br>**TEXT** |
| NCLOB | **NVARCHAR(max)**<br><br>**NTEXT** |
| BLOB | **VARBINARY(max)**<br><br>**IMAGE** |
| JSON | VARCHAR(max) |

不支持以下 SQL Server 数据类型。将不会读取数据。

* CURSOR

* SQL\_VARIANT

* TABLE

以下数据类型转换为 VARCHAR (MAX)：

* XML

* GEOGRAPHY

* GEOMETRY