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 类型都会转换为字符串。 返回: 成功,如果 output 是 default 示例: |
|
批处理列表(查询之间用 返回: 成功,且 示例: |
|
每个查询的结果集列表。 如果某个查询没有返回结果,则此查询以及后续所有查询的结果将不会包含在输出中。使用 'GO' 关键字来分隔查询。 返回: 成功 |
|
查询返回的行列表。 返回: 成功 |
|
列名和值的字典。 任何非标准的 JSON 类型都会转换为字符串。 返回: 成功,如果 output 是 dict 示例: |