我对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'列因此,我不知道如何处理此更新中子查询中的别名。任何帮助表示赞赏!
答案 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_TESTc.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';
的两个引用是冰山一角。我相信以上是你想要的逻辑。