如何将PowerShell字符串数组插入SQL表的LAST_SS_DATE列?
如何将PowerShell时间数组批量插入SQL表的指定列?
可以实现需求,具体操作分三种场景(单条遍历插入、批量高效插入、安全参数化插入),以下是详细步骤和代码:
1. 单条遍历插入(逻辑清晰,适合新手)
遍历$qLastSS_T数组中的每个时间值,为每个值生成独立的INSERT语句并执行:
# 遍历数组内的每个时间戳 foreach ($lastSS in $qLastSS_T) { # 构造INSERT语句,将当前遍历的时间值赋值给LAST_SS_DATE列 $insertQuery = "INSERT INTO Monitoraggio.dbo.IMGs_BKP (DATE,SERVER,SIDE,DAY,SUCCESS,FAILURE_REASON,SS_EXIST,LAST_SS_DATE,LAST_SS_EXIPIRE) VALUES ('$qDT_RunBKP','$_','$qSide','$qDayOfBKP','$qSucces','$qFailRea','$qSS_Exist','$lastSS','$qLastSS_E');" # 执行SQL命令,替换为你的SQL服务器实例地址 Invoke-SqlCmd -Query $insertQuery -ServerInstance "你的SQL实例地址" }
注意事项:
- 你数组中的时间格式
2024-07-08 11:56:32符合SQLdatetime/datetime2类型的识别要求,无需额外转换 - 代码中的
$_、$qDT_RunBKP等变量需确保已正确赋值,对应表中其他列的合法值
2. 批量插入(高效,适合大量数据)
将所有时间值拼接成一条批量INSERT语句,减少与SQL服务器的交互次数:
# 批量生成VALUES子句 $valueClauses = $qLastSS_T | ForEach-Object { "('$qDT_RunBKP','$_','$qSide','$qDayOfBKP','$qSucces','$qFailRea','$qSS_Exist','$_','$qLastSS_E')" } -Join ",`n" # 构造完整的批量插入语句 $batchInsertQuery = "INSERT INTO Monitoraggio.dbo.IMGs_BKP (DATE,SERVER,SIDE,DAY,SUCCESS,FAILURE_REASON,SS_EXIST,LAST_SS_DATE,LAST_SS_EXIPIRE) VALUES $valueClauses;" # 执行批量插入 Invoke-SqlCmd -Query $batchInsertQuery -ServerInstance "你的SQL实例地址"
3. 参数化查询(生产环境必用,避免SQL注入)
以上字符串拼接方式存在SQL注入风险,生产环境建议使用参数化查询:
foreach ($lastSS in $qLastSS_T) { $sqlParams = @{ Query = "INSERT INTO Monitoraggio.dbo.IMGs_BKP (DATE,SERVER,SIDE,DAY,SUCCESS,FAILURE_REASON,SS_EXIST,LAST_SS_DATE,LAST_SS_EXIPIRE) VALUES (@date, @server, @side, @day, @success, @failReason, @ssExist, @lastSS, @lastSSE)" ServerInstance = "你的SQL实例地址" Parameter = @{ date = $qDT_RunBKP server = $_ side = $qSide day = $qDayOfBKP success = $qSucces failReason = $qFailRea ssExist = $qSS_Exist lastSS = $lastSS lastSSE = $qLastSS_E } } Invoke-SqlCmd @sqlParams }
内容的提问来源于stack exchange,提问作者ilRobby
相关产品推荐
相关产品推荐

