community.general.mssql_script 模块 – 在 MSSQL 数据库上执行 SQL 脚本
注意
此模块是 community.general 集合 (版本 10.1.0) 的一部分。
如果您正在使用 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list。
要安装它,请使用:ansible-galaxy collection install community.general。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求。
要在 playbook 中使用它,请指定:community.general.mssql_script。
community.general 4.0.0 中的新增功能
概要
- 在 MSSQL 数据库上执行 SQL 脚本。 
要求
以下要求是在执行此模块的主机上所需的。
- pymssql 
参数
| 参数 | 注释 | 
|---|---|
| 运行数据库的主机。 | |
| 用于身份验证的密码。 | |
| MSSQL 服务器的端口。也需要定义  默认值:  | |
| 用于身份验证的用户名。 | |
| 要运行脚本的数据库。 默认值:  | |
| 使用  输出格式  
 选项 
 | |
| 作为 SQL 参数传递给脚本的参数。(查询  | |
| 要执行的 SQL 脚本。 脚本可以包含多个 SQL 语句。多个批次可以用  每个批次必须返回至少一个结果集。 | |
| 如果请求事务模式,则启动事务,并且只有在脚本成功时才提交更改。否则,回滚事务。 如果不请求事务模式(默认),则自动提交更改。 选项 
 | 
属性
| 属性 | 支持 | 描述 | 
|---|---|---|
| 支持:部分 在检查模式下不会执行脚本。 | 可以在  | |
| 支持:不支持 | 在差异模式下,将返回有关已更改内容(或可能需要在  | 
备注
注意
- 在远程主机上需要 pymssql Python 包。对于 Ubuntu,这很容易,只需 - pip install pymssql(参见 ansible.builtin.pip。)
示例
- name: Check DB connection
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    db: master
    script: "SELECT 1"
- name: Query with parameter
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    script: |
      SELECT name, state_desc FROM sys.databases WHERE name = %(dbname)s
    params:
      dbname: msdb
  register: result_params
- assert:
    that:
      - result_params.query_results[0][0][0][0] == 'msdb'
      - result_params.query_results[0][0][0][1] == 'ONLINE'
- name: Query within a transaction
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    script: |
      UPDATE sys.SomeTable SET desc = 'some_table_desc' WHERE name = %(dbname)s
      UPDATE sys.AnotherTable SET desc = 'another_table_desc' WHERE name = %(dbname)s
    transaction: true
    params:
      dbname: msdb
- name: two batches with default output
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    script: |
      SELECT 'Batch 0 - Select 0'
      SELECT 'Batch 0 - Select 1'
      GO
      SELECT 'Batch 1 - Select 0'
  register: result_batches
- assert:
    that:
      - result_batches.query_results | length == 2  # two batch results
      - result_batches.query_results[0] | length == 2  # two selects in first batch
      - result_batches.query_results[0][0] | length == 1  # one row in first select
      - result_batches.query_results[0][0][0] | length == 1  # one column in first row
      - result_batches.query_results[0][0][0][0] == 'Batch 0 - Select 0'  # each row contains a list of values.
- name: two batches with dict output
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    output: dict
    script: |
      SELECT 'Batch 0 - Select 0' as b0s0
      SELECT 'Batch 0 - Select 1' as b0s1
      GO
      SELECT 'Batch 1 - Select 0' as b1s0
  register: result_batches_dict
- assert:
    that:
      - result_batches_dict.query_results_dict | length == 2  # two batch results
      - result_batches_dict.query_results_dict[0] | length == 2  # two selects in first batch
      - result_batches_dict.query_results_dict[0][0] | length == 1  # one row in first select
      - result_batches_dict.query_results_dict[0][0][0]['b0s0'] == 'Batch 0 - Select 0'  # column 'b0s0' of first row
返回值
常见的返回值已在此处记录 此处,以下是此模块特有的字段
| 键 | 描述 | 
|---|---|
| 批次列表(用  返回:成功和  示例:  | |
| 查询返回的行列表。 返回:成功 | |
| 列值列表。 任何非标准 JSON 类型都将转换为字符串。 返回:如果输出为默认值,则返回成功 示例:  | |
| 批次列表(用  返回:成功且  示例:  | |
| 每个查询的结果集列表。 如果某个查询没有返回结果,则此查询及之后所有查询的结果将不会包含在输出中。使用 ‘GO’ 关键字分隔查询。 返回:成功 | |
| 查询返回的行列表。 返回:成功 | |
| 列名和值的字典。 任何非标准 JSON 类型都将转换为字符串。 返回:如果输出为字典,则返回成功 示例:  | 
