0

В хранимой процедуре SQL Server 2000 я пытаюсь выполнить инструкцию update для переменной таблицы. В настоящее время он дает мне ошибку: «Префикс столбца« WST »не совпадает с именем таблицы или псевдонимом, используемым в запросе».«Префикс столбца« * »не совпадает с именем таблицы или псевдонимом, используемым в запросе». при использовании таблицы temp

UPDATE WST 
SET 
    WST.QtySold = (SELECT SUM(II.QtyShipped) 
    FROM #InvoiceItems II 
     WHERE II.InvoiceDate >= WST.StartDate 
      AND II.InvoiceDate <= WST.EndDate), 
    WST.TotalSales = (SELECT SUM(ISNULL(II.QtyShipped, 0) * ISNULL(II.UnitPrice, 0)) 
     FROM #InvoiceItems II 
     WHERE II.InvoiceDate >= WST.StartDate 
      AND II.InvoiceDate <= WST.EndDate), 
    WST.TotalCost = (SELECT SUM(ISNULL(II.QtyShipped, 0) * ISNULL(II.UnitCost, 0)) 
     FROM #InvoiceItems II 
     WHERE II.InvoiceDate >= WST.StartDate 
      AND II.InvoiceDate <= WST.EndDate) 
FROM @WeeklySalesTrend WST 
WHERE WST.WeekNo = 1 

Эта ошибка появилась только после того, как я создал #InvoiceItems временной таблицы и заменить внутреннее соединение двух таблиц с временной таблицей. Почему изменение внутренней таблицы двух таблиц для таблицы temp вызывает эту ошибку и как мне ее исправить/обойти?

+0

Попробуйте удалить "WST." перед столбцами, которые вы обновляете. По определению только одна таблица может быть целью обновления, поэтому это избыточно, и у меня есть скрытое подозрение, что оптимизатор запутался. –

ответ

0

Ответ сводится к этому, SQL Query Analyzer дал мне неправильное местоположение для ошибки. Ошибка была на самом деле из-за инструкции Insert в 17 строк выше в коде, где я пытался использовать WST, когда я никогда не использовал его там. Я не знаю, было ли это сбоем/ошибкой на стороне Query Analyzer, или если хранимая процедура оптимизирована для большего количества строк и там ее местоположение отключено. В любом случае проблема устранена. Спасибо за предложения и быстрые ответы, хотя и жаль, что тратил ваше время.

0

У меня нет SQL 2000-кода, чтобы проверить это, но я думаю, что ваш синтаксис запроса верен. Я подозреваю, что могут быть невидимые управляющие символы, которые испортят разбор. Время от времени это случалось, но я не видел эту проблему некоторое время. Попробуйте ввести запрос в новое окно запроса с нуля.