Sql server 与IF语句的联合

Sql server 与IF语句的联合,sql-server,select,if-statement,union,Sql Server,Select,If Statement,Union,我正在编写一个查询,它对数据库表执行各种检查,并返回结果摘要(在单个结果集中) 结果表应如下所示: name result description password check COMPLETED OK contex properties check ERROR no context property has been entered 我知道语法不正确,但我想不出任何方法来实现这一点。也许可以这样做: SELECT 'p

我正在编写一个查询,它对数据库表执行各种检查,并返回结果摘要(在单个结果集中)

结果表应如下所示:

name                    result  description
password check          COMPLETED   OK
contex properties check ERROR       no context property has been entered
我知道语法不正确,但我想不出任何方法来实现这一点。

也许可以这样做:

SELECT 'password check' as name, 'ERROR' as result ,'there is user(s) with blank password' as description
WHERE EXISTS ( select * from member_table WHERE password IS NULL )
UNION
SELECT 'password check' as name, 'ERROR' as result ,'there is user(s) with blank password' as description
WHERE NOT EXISTS ( select * from member_table WHERE password IS NULL )

UNION

SELECT 'context properties check' as name, 'ERROR' as result ,'no context property has been entered' as description
WHERE NOT EXISTS (select * from server_context_properties)
UNION
SELECT 'context properties check' as name, 'COMPLETED' as result, 'OK' as description
WHERE EXISTS (select * from server_context_properties)
您可以尝试以下方法:

DECLARE @passwordcheck INT, @contextcheck INT

SELECT @passwordcheck = COUNT(*) 
FROM member_table 
WHERE [password] IS NULL

SELECT @contextcheck = COUNT(*) 
FROM server_context_properties

SELECT  'password check' as name, 
        CASE WHEN @passwordcheck > 0 THEN 'ERROR' ELSE 'COMPLETED' END as result,
        CASE WHEN @passwordcheck > 0 THEN 'there is user(s) with blank password' ELSE 'OK' as description
UNION
SELECT  'context properties check' as name, 
        CASE WHEN @contextcheck = 0 THEN 'ERROR' ELSE 'COMPLETED' END as result,
        CASE WHEN @contextcheck = 0 THEN 'no context property has been entered' ELSE 'OK' END as description

这个解决方案看起来最干净,但我只是有点担心它可能会在每次检查执行两次相同查询时造成性能开销。我认为这是最好的解决方案。看起来也非常可扩展和干净:)
DECLARE @passwordcheck INT, @contextcheck INT

SELECT @passwordcheck = COUNT(*) 
FROM member_table 
WHERE [password] IS NULL

SELECT @contextcheck = COUNT(*) 
FROM server_context_properties

SELECT  'password check' as name, 
        CASE WHEN @passwordcheck > 0 THEN 'ERROR' ELSE 'COMPLETED' END as result,
        CASE WHEN @passwordcheck > 0 THEN 'there is user(s) with blank password' ELSE 'OK' as description
UNION
SELECT  'context properties check' as name, 
        CASE WHEN @contextcheck = 0 THEN 'ERROR' ELSE 'COMPLETED' END as result,
        CASE WHEN @contextcheck = 0 THEN 'no context property has been entered' ELSE 'OK' END as description
Select Properties.Name, Properties.Result, Properties.Description
From    (
        Select 'password check', 1 As value, 'ERROR' As Result, 'There is a user with a blank password' As Description
        Union All Select 'password check', 0, 'COMPLETED', 'OK'
        Union All Select 'context properties check', 0, 'ERROR', 'No context property has been entered'
        Union All Select 'context properties check', 1, 'COMPLETED', 'OK'
        ) As Properties
    Join    (
            Select 'password check' As name
                , Case
                    When Exists( Select 1 From member_table Where password Is Null ) Then 1
                    Else 0
                    End As Value
            Union All 
            Select 'context properties check'
                , Case
                    When Exists( Select 1 From server_context_properties ) Then 1
                    Else 0
                    End
            ) As Results
        On Results.Name = Properties.Name
            And Results.Value = Properties.Value