我有以下查询将表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(' ');
}
}
答案 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..sku
与o.sku
不同。