powershell可读取多行sql

powershell可读取多行sql,sql,powershell,Sql,Powershell,我目前有一个powershell脚本,如下所示: $Query = "SELECT t1.BSM_NM ,t1.D_DTM AS MAXDATETIME ,t1.TECHNOLOGY ,t1.VOICEDATA ,CASE WHEN t1.VOICEDATA = 'VOICE' AND (

我目前有一个powershell脚本,如下所示:

$Query = "SELECT 
         t1.BSM_NM
        ,t1.D_DTM AS MAXDATETIME
        ,t1.TECHNOLOGY
        ,t1.VOICEDATA
        ,CASE
            WHEN t1.VOICEDATA = 'VOICE'
                 AND
                   (
                     t1.CUST_BLK_CNT/t1.ATT_CNT >= t2.MAJOR_VOICE_BLOCK AND t1.CUST_BLK_CNT/t1.ATT_CNT < t2.CRITICAL_VOICE_BLOCK
                     OR
                     t1.DRP_CALL_CNT/t1.ATT_CNT >= t2.MAJOR_VOICE_DROP AND t1.DRP_CALL_CNT/t1.ATT_CNT < t2.CRITICAL_VOICE_DROP
                     OR
                     t1.AXS_F_CNT/t1.ATT_CNT >= t2.MAJOR_VOICE_AXSFAIL AND t1.AXS_F_CNT/t1.ATT_CNT < t2.CRITICAL_VOICE_AXSFAIL
                   )
            THEN 1
            WHEN t1.VOICEDATA = 'DATA'
                 AND
                   (
                     t1.CUST_BLK_CNT/t1.ATT_CNT >= t2.MAJOR_VOICE_BLOCK AND t1.CUST_BLK_CNT/t1.ATT_CNT < t2.CRITICAL_DATA_BLOCK
                     OR
                     t1.DRP_CALL_CNT/t1.ATT_CNT >= t2.MAJOR_VOICE_DROP AND t1.DRP_CALL_CNT/t1.ATT_CNT < t2.CRITICAL_DATA_DROP
                     OR
                     t1.AXS_F_CNT/t1.ATT_CNT >= t2.MAJOR_VOICE_AXSFAIL AND t1.AXS_F_CNT/t1.ATT_CNT < t2.CRITICAL_DATA_AXSFAIL
                   )
            THEN 1
            WHEN t1.VOICEDATA = 'VOICE'
                 AND
                   (
                     t1.CUST_BLK_CNT/t1.ATT_CNT >= t2.CRITICAL_VOICE_BLOCK
                     OR
                     t1.DRP_CALL_CNT/t1.ATT_CNT >= t2.CRITICAL_VOICE_DROP
                     OR
                     t1.AXS_F_CNT/t1.ATT_CNT >= t2.CRITICAL_VOICE_AXSFAIL
                   )
            THEN 2
            WHEN t1.VOICEDATA = 'DATA'
                 AND
                   (
                     t1.CUST_BLK_CNT/t1.ATT_CNT >= t2.CRITICAL_DATA_BLOCK
                     OR
                     t1.DRP_CALL_CNT/t1.ATT_CNT >= t2.CRITICAL_DATA_DROP
                     OR
                     t1.AXS_F_CNT/t1.ATT_CNT >= t2.CRITICAL_DATA_AXSFAIL
                   )
            THEN 2
            ELSE 0
         END MAJORCRITICAL
        FROM DS3R_FH_ALL_TRIGGER_VIEW t1
        INNER JOIN
        ZDMSN.DS3R_1XRTT_TRIGGERS_THRESHOLD t2
        ON
        t1.BSM_NM = t2.BSC_NM
        AND
        t1.TECHNOLOGY = t2.TECHNOLOGY
        WHERE t1.BSM_NM = 'ARL1' and t1.D_DTM = (SELECT MAX(D_DTM) FROM DS3R_FH_1XRTT_BTS_LVL_KPI WHERE BSM_NM = 'ARL1')"      

$data_set = new-object system.data.dataset
$adapter = new-object system.data.oracleclient.oracledataadapter ($Query, $Connection)
[void] $adapter.Fill($data_set)
$table = new-object system.data.datatable
$table = $data_set.Tables[0]
$bsmNM = $data_set.Tables[0].Rows[0].BSM_NM
$maxDT = $data_set.Tables[0].Rows[0].MAXDATETIME
$majorC = $data_set.Tables[0].Rows[0].MAJORCRITICAL
$table | Select MAJORCRITICAL 
  {  
    if ($majorC -match "*2*" -and $majorC -match "*1*")
    if ($majorC -match "*1*" )
    if ($majorC -match "*2*")
结果如下:


它没有错误,但它似乎没有做我想让它做的事情。如果MAJORCRITICAL列中的任何一行中的值为1,我希望它执行第二个If语句,如果一行中有1,另一行中有2,我希望它执行第一个If语句。代码运行,但if语句没有运行…

您只看到示例中的第一行,因为您没有执行foreach或类似操作


此外,您需要使用$来引用foreach alias%中的当前项。

您可能希望在下次尝试分离数据检索和解析,以确定谁是罪魁祸首。当你知道问题所在时,提供帮助就更容易了。它还可以帮助您自己找到解决方案。