它,我有一个名为任务,ProjectTeamMemeber,等级和分配四个表。
每个任务与通过一个层次结构项目和每个项目都有团队成员可通过ProjectTeamMember看到。值复制到另一个表,如果它不已经存在
select
TH.TaskId As TaskID, P.PersonId As PersonID
from
Task T
Inner join Hierarchy TH on T.Id = TH.TaskId
Inner join ProjectTeamMemeber PTM on TH.ProjectId = P.TaskId
where
T.name = 'work'
上述查询返回分配给特定项目中,任务名称为“工作”
TaskId PersonId
1347 50
1350 50
3377 50
3403 598
3411 1450
3411 1454
3411 1472
的所有的人,我有另一个表分配新建分配FY从中我可以看到人的ID,该ID被分配给一个特定的任务。
select
T.Id, A.PersonId
from
Task T
inner join Assignment A ON T.Id = A.TaskId
where
T.name = 'work'
以上查询返回分配给任务的所有人称为'工作'。现在
TaskId PersonId
1347 50
1350 50
3411 1472
,我要在这里实现的是分配所有人员与被分配到其中有一个任务名称“工作”项目名称“工作”的任务。简单地说,我必须编写一些sql语句,在此之后,我的第二个查询与第一个查询的结果相同。
到目前为止,我曾尝试与cusrsors要做到这一点,但它是行不通的。下面是该
DECLARE @TaskId int
DECLARE @PersonId int
DECLARE @Id int
DECLARE db_cursor CURSOR FOR
select
TH.TaskId As TaskID, P.PersonId As PersonID
from
Task T
Inner join Hierarchy TH on T.Id = TH.TaskId
Inner join ProjectTeamMemeber PTM on TH.ProjectId = P.TaskId
where
T.name = 'work'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @TaskId, @PersonId
BEGIN
If not exists (select 1 from Assignment where [email protected] and [email protected])
BEGIN
EXEC GetUniqueIdentifier @Id OUTPUT;
Insert INTO Assignment (Id, TaskId, PersonId) values (@Id, @TaskId, @PersonId)
END
END
CLOSE db_cursor
DEALLOCATE db_cursor
(注意代码:我必须使用EXEC声明@Id GetUniqueIdentifier输出;来生成ID我知道有可能不同,更可靠的方式来生成的ID,但由于一些限制我不能改变是如何被生成的ID)
编辑:
基于LAMAK答案我跑这
DECLARE @ids int
INSERT INTO Assignment (Id, TaskId, PersonId)
EXEC GetUniqueIdentifier @ids OUTPUT;
SELECT
@ids,
TH.TaskId As TaskID,
P.PersonId As PersonID,
FROM
Task T
INNER JOIN Hierarchy TH on T.Id = TH.TaskId
INNER JOIN ProjectTeamMember P on TH.ProjectId = P.TaskId
WHERE
T.name = 'Customer work'
AND NOT EXISTS(SELECT 1 FROM Assignment
WHERE TaskID = TH.TaskId
AND PersonId = P.PersonId)
你migth是对有关newid的,但我必须这样做的方式如上所述使用GetUniqueIdentifier过程 – LivingThing
请参阅我编辑的问题 – LivingThing
@LivingThing *叹* GetUniqueIdentifier返回什么?,您可以发布代码吗? – Lamak