2013-07-26 2 views
0

Я портирования базу данных доступа к SQL Server, и наткнулся на следующее:SQL Update с конкатенации

UPDATE 
[tableA], 
[tableB], 
[tableC] 
SET [tableC].STATION_NB = [tableB]!Station 
WHERE ((([tableA]![FirstOfCOMPONENT NUMBER] & [tableB]![COMPONENT NUMBER]) Like [tableC]![MOTOR_AND_PART]) 
    AND (([tableC]![PART]) Like [tableB]![COMPONENT NUMBER])); 

Названия таблиц были изменены, чтобы защитить виновных. По-видимому, это было сделано для создания уникального списка комбинаций всех двигателей, их уникальных деталей и номера станции, где детали были прикреплены к двигателю. Конечно, это далеко не нормально для кода T-SQL, так вот моя попытка исправить это для перехода:

UPDATE [tableC] 
SET [tableC].[STATION_NB] = 
    (SELECT b.Station 
    FROM [tableB] b 
    WHERE ((([tableA].[FirstOfCOMPONENT NUMBER] + b.[COMPONENT NUMBER]) Like [tableC].[MOTOR_AND_PART]) 
     AND (([tableC].[PART]) Like b.[COMPONENT NUMBER]))) 

Когда я бегу, что SSMS жалуется, что The multi-part identifier "tableA.FirstOfCOMPONENT NUMBER" could not be bound. я думаю, что это потому, что я не сделал сделайте ПРИСОЕДИНЕНИЕ. Однако меня не интересует [tableA].[FirstOfCOMPONENT NUMBER], меня интересует результат конкатенации. но как я могу сделать JOIN, чтобы привести таблицу в запрос правильно?

ответ

1

Ниже представлен запрос только о том, что вы хотели бы сделать здесь. Вы можете заменить «ColName» на имена столбцов, которые являются общими в таблицеA и таблицеB:

Update C 
Set C.[STATION_NB]=B.STATION 
FROM 
    tableA A 
join 
    tableB B on A.<Colname>=B.<Colname> 
join 
    tableC C on C.PART=B.[COMPONENT NUMBER] 
where 
    A.[FirstOfCOMPONENT NUMBER] + B.[COMPONENT NUMBER])= [tableC].[MOTOR_AND_PART] 
+0

Спасибо! Я снова загляну в стол, чтобы убедиться, но я беспокоюсь, что у них нет общей колонки. –

+1

Обновление: я нашел один, хотя он может и не быть правильным. Посмотрим! Спасибо, Сонам. Я правильно ответил на ваш ответ. –

Смежные вопросы