Sql Update - 不明确的列名

时间:2017-04-14 14:55:57

标签: sql sql-server tsql sql-update

我有以下查询将表o的字段sku更新为表p的字段AutoSKU。运行它会给我一个错误:"不明确的列名' sku'"。我也知道问题是因为引擎在WHERE条件下不知道我在说什么sku。但我需要这个条件来确保每个更新行都正确映射。用o.sku替换sku会产生另一个错误"多部分标识符" o..sku"无法受约束。"。任何想法?

onReady(function() {
  toggleClass(document.getElementById('page'), 'hidden');
  toggleClass(document.getElementById('loading'), 'hidden');
});

function onReady(callback) {
  var intervalID = window.setInterval(function checkReady() {
    if (document.getElementsByTagName('body')[0] !== undefined) {
      window.clearInterval(intervalID);
      callback.call(this);
    }
  }, 1000);
}

// http://youmightnotneedjquery.com/
function toggleClass(el, className) {
  if (el.classList) el.classList.toggle(className);
  else {
    var classes = el.className.split(' ');
    var existingIndex = classes.indexOf(className);
    if (existingIndex >= 0) classes.splice(existingIndex, 1);
    else classes.push(className);
    el.className = classes.join(' ');
  }
}

2 个答案:

答案 0 :(得分:1)

这很可能是由于最后一行 - AND sku = a.Sku,您需要为第一个sku列添加别名,如下所示:

UPDATE  o
SET     sku = p.AutoSKU
FROM    o (NOLOCK)
        JOIN a (NOLOCK) ON a.Sku = o.sku
        JOIN p (NOLOCK) ON p.Code = a.ProductCode
WHERE   o.sku <> p.AutoSKU
        AND o.sku = a.Sku -- a bit redundant

虽然正如@GordonLinoff所提到的那样,WHERE子句中不需要这个条件,因为你已经在ON子句中使用了它。

答案 1 :(得分:0)

这应该没问题:

UPDATE o
    SET sku = p.AutoSKU
    FROM o JOIN
         a 
         ON a.Sku = o.sku JOIN
         p
         ON p.Code = a.ProductCode
    WHERE o.sku <> p.AutoSKU;

ON子句已经具有sku s的条件。没有必要在WHERE子句中重复这一点。

此外,除非您非常有意使用它,否则不要使用WITH (NOLOCK)

最后,您的错误消息表明您在该版本的查询中输入了拼写错误。 o..skuo.sku不同。