gpt4 book ai didi

sql - 如何从SQL Server数据库获取所有触发环境

转载 作者:行者123 更新时间:2023-12-03 03:40:53 25 4
gpt4 key购买 nike

我正在尝试查询bamboo的数据库以获取以下信息。我想找出触发信息,即哪个构建计划上的哪个分支触发了哪个环境。问题是某些环境可以由其他环境触发。

到目前为止,我已经查找了 Bamboo 数据库,我似乎拥有了大部分(如果不是全部)我需要的信息。我所做的是 Bamboo 数据库中有一个名为 dbo.Deployment_Environment 的表,其中包含字段 EnvironmentIDTriggers_XML_Data ,这正是我需要从中得到。然后还有另一个名为 dbo.Deployment_Result 的表,其中包含 EnvironmentIDDeployment_StateTrigger_Reason

从这两个表中我认为我需要做的是这个。选择所有这些列,但如果 trigger_reason 包含 environment 并且 triggers_xml_data 包含 environment,则获取 <来自triggers_xml_Data的strong>环境(位于xml节点/item/value下)。获得该 ID 后,选择所有相同的列,如果环境再次成为部署的原因,则重复该过程,直到不是。 triggers_xml_data 数据类型为 ntexttrigger_reasonnvarchar

我不太确定如何在 SQL 中做到这一点,这是我到目前为止正在尝试的,但我无法获得正确的信息:

alter proc dbo.myStoredProc3
as
Declare @EnvironmentID int

select
@EnvironmentID as ENVIRONMENT_ID,
de.ENVIRONMENT_ID, dr.DEPLOYMENT_STATE,
de.TRIGGERS_XML_DATA, dr.TRIGGER_REASON, de.NAME
from
dbo.BUILDRESULTSUMMARY as br,
dbo.DEPLOYMENT_ENVIRONMENT as de,
dbo.DEPLOYMENT_RESULT as dr
where
dr.TRIGGER_REASON like '%environment%'
(
select de2.ENVIRONMENT_ID as 'test'
from dbo.DEPLOYMENT_ENVIRONMENT as de2
)

我知道这不会获得正确的信息,但每次我尝试在 SQL 中执行 case 或 if 语句时,它也会产生错误:如何正确执行此查询?我认为我已经提供了所需的所有信息,但如果没有,我可以添加更多信息。

我还尝试过执行以下操作:

While (@Counter <= 5)
Begin
Select de.NAME As 'Deployment Name', dr.TRIGGER_REASON as 'Trigger Reason', dr.DEPLOYMENT_STATE as 'Status'
from dbo.DEPLOYMENT_ENVIRONMENT as de, dbo.DEPLOYMENT_RESULT as dr
Where de.TRIGGERS_XML_DATA like '%environment%' and dr.TRIGGER_REASON like '%environment%'
SET @Counter = @Counter + 1
END

但这不会链接我得到的列。如果Trigger_Reason环境有关,那么在ntext中它将有一个节点,该节点具有environmentID,我想获取它并将其设置变量,我可以使用它来获取链接在一起的更多列,例如从 dbo.Environment 中选择名称,其中 @NewEnvironmentID = de.EnvironmentID。

编辑

使用以下 SQL 查询:

alter proc getEnvironmentTriggers
@EnvironmentID int
as
Select a.NAME, a.TRIGGERS_XML_DATA, a.TRIGGER_REASON, a.ENVIRONMENT_ID
From (Select de.NAME, de.TRIGGERS_XML_DATA, de.ENVIRONMENT_ID, dr.TRIGGER_REASON From dbo.DEPLOYMENT_ENVIRONMENT as de
Inner join dbo.DEPLOYMENT_RESULT as dr
on dr.ENVIRONMENT_ID = de.ENVIRONMENT_ID
Where @EnvironmentID = de.ENVIRONMENT_ID and de.TRIGGERS_XML_DATA like '%Environment%' and dr.TRIGGER_REASON like '%Environment%' ) a

我已经接近我所需要的了。执行此操作并执行存储过程,如下所示:exec dbo.getEnvironmentTriggers 15892483,这将在 TRIGGERS_XML_DATA 的 ntext l 内的查询中返回,其值为18317322,然后使用该 ID,我可以获得 19234819 的值,这是从该 ID 触发我的所有环境的最后一个环境。

所以我想做的是:

  1. 通过执行以下操作,可以自动获取所有这些 ID。
  2. 使用所有 ID 执行存储过程(也许每种方式都使用某种 ID)。
  3. 在 SQL 中搜索 ntext 列以获取环境 ID(位于以下节点 /item/value 中。
  4. 将其存储为变量,然后使用它从其他存储过程获取所有列。
  5. 如果使用存储过程返回了列,请再次运行该过程,否则导出从存储过程获取的所有 TRIGGER_XML_DATA 列。

有什么办法可以做到这一点吗?

最佳答案

在这里查看我的答案 - https://answers.atlassian.com/questions/44908050/how-to-get-the-trigger-information-from-the-bamboo-database

不确定是否可以使用普通 SQL 来实现

关于sql - 如何从SQL Server数据库获取所有触发环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41125386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com