PowerShell遍历SQL数据时变量赋值异常问题求助
问题根源:混淆赋值运算符与比较运算符
你的代码核心错误是把赋值运算符=当成了比较运算符,导致判断逻辑完全混乱,还意外修改了原数据。
具体问题分析
在PowerShell中:
=是赋值运算符,执行时会把右侧的值赋给左侧变量,然后返回赋值后的值。- 你写的
if ($data.IsCurrent = 1),每次执行都会把$data.IsCurrent强制设为1,而这个赋值表达式返回的是1(PowerShell中视为$true),所以所有循环都会进入if分支,最后$Prim会被最后一行的Name覆盖,else/elseif永远不会触发。 - 这也是为什么运行脚本后,
$rows里的IsCurrent列全变成1或0的原因——你在判断时直接修改了原数据。
修正后的代码
PowerShell中判断相等要用-eq运算符,修改后的代码如下:
写法一修正:
foreach($data in $rows){ if ($data.IsCurrent -eq 1) { $Prim = $data.Name } else { $Sec = $data.Name } }
写法二修正:
foreach($data in $rows){ if ($data.IsCurrent -eq 1) { $Prim = $data.Name } elseif ($data.IsCurrent -eq 0){ $Sec = $data.Name } } Write-Host $Prim Write-Host $Sec
补充说明
用-eq做比较不会修改原数据,判断逻辑会按照预期执行:
- 当
IsCurrent等于1时,将Name赋值给$Prim - 当
IsCurrent等于0时,将Name赋值给$Sec
内容的提问来源于stack exchange,提问作者m12345
相关产品推荐
相关产品推荐

