You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在KQL中将列值存入变量并用于后续同表查询?

在KQL中实现单个值变量存储与跨查询复用

SQL 参考示例

先看SQL中类似的逻辑,先查询获取单个值存入变量,再在后续查询中复用:

-- 定义变量并赋值(以SQL Server为例)
DECLARE @ObjectID VARCHAR(MAX)
SELECT @ObjectID = COLUMN1 FROM TABLE WHERE COLUMN2 = 'value'

-- 后续查询使用变量
SELECT * FROM ANOTHER_TABLE WHERE RELATED_COLUMN = @ObjectID

KQL 实现方案

在KQL中,我们可以通过let关键字定义标量变量,结合toscalar()函数从查询结果中提取单个值,实现跨查询复用。

步骤1:定义存储ObjectID的变量

从你提供的第一个查询中提取目标ObjectID,将其转为标量存入变量(确保返回单个值,避免变量无效):

let targetObjectID = toscalar(
    AuditLogs
    | extend GroupName = tostring(TargetResources[0].displayName)
    | extend ObjectID = tostring(TargetResources[0].id)
    | where Category has "Management"
    | where GroupName startswith_cs "XYZ"
    | project ObjectID  // 仅保留目标列
    | take 1  // 强制取单个结果,若查询结果唯一可省略
);

步骤2:在后续查询中使用变量

直接调用预定义的targetObjectID变量,替换原查询中的ObjectID:

// 接上述变量定义,编写后续查询
AuditLogs
| where Category has "Management" and OperationName has "Add member to group"
| extend ObjectID2 = tostring(TargetResources[1].id)
| extend UPN = tostring(TargetResources[0].userPrincipalName)
| where ObjectID2 == targetObjectID  // 使用变量过滤

完整可运行代码

将两部分合并,就是完整的可执行查询:

let targetObjectID = toscalar(
    AuditLogs
    | extend GroupName = tostring(TargetResources[0].displayName)
    | extend ObjectID = tostring(TargetResources[0].id)
    | where Category has "Management"
    | where GroupName startswith_cs "XYZ"
    | project ObjectID
    | take 1
);

AuditLogs
| where Category has "Management" and OperationName has "Add member to group"
| extend ObjectID2 = tostring(TargetResources[1].id)
| extend UPN = tostring(TargetResources[0].userPrincipalName)
| where ObjectID2 == targetObjectID

注意事项

  • 必须保证toscalar()包裹的查询返回单个值,如果原查询可能返回多条结果,take 1或summarize any(ObjectID)可以确保变量为有效标量。
  • let定义的变量作用域为整个查询脚本,只能在定义后的语句中使用。

内容的提问来源于stack exchange,提问作者AnthonyC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:02:20