SQL Server打印消息不会进入chef inspec进行验证。我们有没有一个选项来验证。
下面的chef inspec示例代码不接受SQL Server打印消息。
sql = mssql_session(user: 'sa', password: 'Test')
describe sql.query("
-- #5.2 - Set the ''default trace enabled'' Server Configuration Option to 1
IF EXISTS (SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'default trace enabled' and (value=1 and value_in_use=1))
BEGIN
PRINT 'OK'
END
ELSE
PRINT 'NOT OK'") do
its("value") { should eq 'OK' }
end
end发布于 2020-11-23 04:10:47
不是打印'OK‘,而是选择'OK’作为值/选择'NOT OK‘作为值。
以编程方式获取打印消息是可以的,但是您需要代码来侦听连接的InfoMessage事件。基本上,您需要深入研究mssql_session或sql.query的代码...你可能不想这么做。
发布于 2020-11-23 12:07:59
您可以修改语句以直接返回OK或NOT OK,如下所示。SELECT返回结果集。打印不返回结果集。驱动程序必须使用InfoMessage事件以不同的方式读取它。Read more。
更好的方法是使用@user2845090建议的SELECT语句。
SELECT CASE WHEN
EXISTS (SELECT name
, CAST(value as int) as value_configured
, CAST(value_in_use as int) as value_in_use
FROM sys.configurations WHERE name = 'default trace enabled'
and (value=1 and value_in_use=1)) THEN 'OK' ELSE 'NOT OK'
END或
SELECT IIF(EXISTS((SELECT name
, CAST(value as int) as value_configured
, CAST(value_in_use as int) as value_in_use
FROM sys.configurations WHERE name = 'default trace enabled'
and (value=1 and value_in_use=1)),'OK','NOT OK') https://stackoverflow.com/questions/64955917
复制相似问题