如何将WIQL查询转换为T-SQL

时间:2018-06-21 19:06:24

标签: sql-server tsql tfs wiql

(免责声明:T-SQL和SSRS专家,暴露于WIQL大约两个小时)

我有一些用户使用他们钟爱的UI设计器(使用每月硬编码的参数)创建了一个Team Foundation Services(TFS)工作项查询,并要求我探索将其转换为SSRS报告他们可以在其中传递所需的所有参数。

为此,我猜测我需要将查询转换为T-SQL。

将报告导出为.wiq文件,然后在.wiq文件内的xml中读取查询,我能够提取以下WIQL(出于机密性进行了略微编辑)。问题是,查看我的TFS服务器,该服务器包含数据库TFS_Coniguration,Tfs_CX,Tfs_DefaultCollection,TFS_IT和TFS_Warehouse,在任何地方都看不到名为WorkItems的表或视图,因此我不知所措地将下面的WIQL转换为T -SQL。

如果TFS中存储了某种表别名,这可以为我提供线索,我看不到。

所以,问题:如何将下面的WIQL转换为T-SQL?

SELECT 
    [System.Id], [System.AreaPath], [System.Title], [System.Tags], [System.AssignedTo], 
    [System.State], [foo.VSTS.Agile.Release], [System.CreatedDate], [Microsoft.VSTS.Scheduling.StoryPoints] 
FROM 
    WorkItems 
WHERE 
    [System.TeamProject] = @project AND
    [System.WorkItemType] IN ('User Story') AND
    [System.State] = 'Active' AND
    [foo.VSTS.Agile.Release] <= '2018-06-10T00:00:00.0000000' AND
    [foo.VSTS.Agile.Release] >= '2018-06-30T00:00:00.0000000' AND
    [System.AreaPath] UNDER 'AppDev' 
ORDER BY
    [foo.VSTS.Agile.Release]

1 个答案:

答案 0 :(得分:1)

Daniel是正确的,不建议使用SQL直接查询TFS操作存储(Tfs_DefaultCollection),这可能会失去MS TFS支持团队的支持。

  

一种方法是使用数据库视图   vw_denorm_WorkItemCoreLatest。在这种情况下,“最新”是指   获得工作项目的最新版本,而没有任何先前版本   它的。如果需要工作项目的所有版本,请使用视图   vw_WorkItemCoreAll

WIQL中的示例如下:

SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State]
FROM WorkItems 
WHERE [System.TeamProject] = @project
  and [System.WorkItemType] = 'Ticket'
  and [System.State] <> 'Closed'
  and [System.State] <> 'Removed'

除了选定的列,还有一个SQL示例供您参考:

SELECT *
FROM [dbo].[vw_denorm_WorkItemCoreLatest]
WHERE [System.TeamProject] = 'MyTeamProject'
  and [System.WorkItemType] = 'Ticket'
  and [System.State] <> 'Closed'
  and [System.State] <> 'Removed'

对于仓库,请查看How to query Work Items using SQL on the Relational Warehouse