SQL UPDATE''a'多次指定了列'ID'

时间:2017-06-28 21:29:03

标签: sql linked-server

我对SQL很新,我无法找到解决此错误的方法。我知道我会收到错误,因为我从同一个表中拉两次相同的列名,所以我为表创建了不同的别名。
我想要做的是使用查询来更新数据库中的表以从链接服务器中提取数据。

以下是一个示例:

UPDATE [Database].dbo.T1 
SET 
    T1.Status = item.Status,
    T1.CategoryA = c.DESC_TEXT,
    T1.CategoryB = d.DESC_TEXT
FROM
(SELECT c.DESC_TEXT, d.DESC_TEXT
    inner join CSM_CODE c ON c.DESC_CD = item.ParCat and c.DESC_TYPE = 'PARCAT'
    inner join CSM_CODE d ON d.DESC_CD = item.ChCat and d.DESC_TYPE = 'CHCAT'
WHERE
    T1.Status = 'NEW')) A

WHERE [Database].dbo.T1.ID = A.ID

这是我的确切错误:

'A'

多次指定了'DESC_TEXT'列

因此,我不知道如何处理此更新中子查询中的别名。任何帮助表示赞赏!

5 个答案:

答案 0 :(得分:1)

谢谢大家帮忙解决这个问题。我现在知道为什么我仍然收到错误。一旦我在子查询中创建了别名,我就无法在SET中更新该别名。

UPDATE [database].dbo.T1
SET
    [STATUS] = A.[STATUS],
    [Scrum Team] = A.team_name, 
    [Parent Category] = A.prodparcat,
    [Child Category] = A.prodcat
FROM
    (SELECT 
     item.SEQ_ID,
    item.STATUS,
    c.DESC_TEXT prodparcat,
    d.DESC_TEXT prodcat
FROM item
    inner join csm_code c ON c.DESC_CD = item.parent_cat_cd and c.DESC_TYPE = 'PRODPARCAT'
    inner join CSM_CODE d ON d.DESC_CD = item.prod_cat and d.DESC_TYPE = 'PRODCAT'
WHERE

item.STATUS = 'NEW' ) A
WHERE
    [database.dbo.T1.[external ID] = A.SEQ_ID

同样重要的是要注意我正在查询链接服务器,该服务器需要我的别名的一些创造力。整体而言,这是一次很棒

再次感谢!

答案 1 :(得分:0)

您已使用

指定了两次DESC_TEST
c.DESC_TEXT, d.DESC_TEXT 

尝试重命名为。

c.DESC_TEXT category_a , d.DESC_TEXT category_b

您还需要A中的ID才能加入。

给你一个想法的例子。

UPDATE [Database].dbo.T1 
SET 
    T1.Status = A.Status,
    T1.CategoryA = A.CategoryA,
    T1.CategoryB = A.CategoryB
FROM
(SELECT item.status, c.id, c.DESC_TEXT CategoryA, d.DESC_TEXT CategoryB
    from item -- added after seeing the answer.
    inner join CSM_CODE c ON c.DESC_CD = item.ParCat and c.DESC_TYPE = 'PARCAT'
    inner join CSM_CODE d ON d.DESC_CD = item.ChCat and d.DESC_TYPE = 'CHCAT'
WHERE
    T1.Status = 'NEW')) A

WHERE [Database].dbo.T1.ID = A.ID

未测试

答案 2 :(得分:0)

而不是FROM它应该是update-join构造,如下所示。还要为重复列使用列别名。

UPDATE [Database].dbo.T1 
SET 
    T1.Status = item.Status,
    T1.CategoryA = A.cdesk,
    T1.CategoryB = A.ddesk
JOIN
(SELECT c.DESC_TEXT as cdesk, d.DESC_TEXT as ddesk
 FROM item
 inner join CSM_CODE c ON c.DESC_CD = item.ParCat and c.DESC_TYPE = 'PARCAT'
inner join CSM_CODE d ON d.DESC_CD = item.ChCat and d.DESC_TYPE = 'CHCAT'
WHERE T1.Status = 'NEW')) A    
ON [Database].dbo.T1.ID = A.ID

答案 3 :(得分:0)

您正在将一个名为DESC_TEXT的列从两个不同的表组合成一个表,即您的案例中的A.在这种情况下,您必须为这两列提供不同的名称,例如DESC_TEXT_c和DESC_TEXT_d,并相应地更新T1。

答案 4 :(得分:0)

我怀疑你想要:

obj[data[i]].length,

如上所述,您的代码有多个语法错误。子查询中对UPDATE T1 SET Status = item.Status, CategoryA = c.DESC_TEXT, CategoryB = d.DESC_TEXT FROM [Database].dbo.T1 T1 JOIN CSM_CODE c ON c.DESC_CD = T1.ParCat and c.DESC_TYPE = 'PARCAT' JOIN CSM_CODE d ON d.DESC_CD = item.ChCat and d.DESC_TYPE = 'CHCAT' WHERE T1.Status = 'NEW'; 的两个引用是冰山一角。我相信以上是你想要的逻辑。