Вы хотите, чтобы подзапрос только получал максимальное значение для table1 и начинал номер строки с этим значением, но вы включаете другие значения внутри ... Коррелированные подзапросы должны возвращать одно значение.
INSERT Table1 (...)
SELECT
RN = (SELECT MAX(CAST(Code AS INT)) FROM Table1) /* Subquery that returns single value */
+ ROW_NUMBER() OVER (ORDER BY [U_PosNo]) /* your row number */
, /*Other columns*/ ....
FROM Table2
Чтобы получить отформатированный код для вашего подхода
SELECT
RIGHT(
REPLICATE('0', 8)
+ CAST(
(SELECT MAX(CAST(Code AS INT)) FROM Table1)
+ ROW_NUMBER() OVER (ORDER BY U_PosNo)
AS VARCHAR)
, 8)
FROM Table2
Для других подзапросов я рекомендую присоединиться к таблице 3 или применить ее, поскольку вы используете одно и то же условие для всех из них ....
Используйте объединение, если вам нужно вставить одну запись на строку в Таблице3, оставьте, если вы хотите вставить, даже если там нет записей.
SELECT
RIGHT(
REPLICATE('0', 8)
+ CAST(
(SELECT MAX(CAST(Code AS INT)) FROM Table1)
+ ROW_NUMBER() OVER (ORDER BY U_PosNo)
AS VARCHAR)
, 8),
Table3.LPrice,
CASE
WHEN [Table2].[MaInC] = 1 THEN [Table2].[MatIdColumn]
ELSE [TABLE3].[Column2] END
FROM Table2
/*LEFT*/ JOIN Table3 ON [TABLE3].[ItemCode] = [Table2].[U_ItmNo]
Если вам нужно использовать только одну совпадающую запись из Таблицы3, скажем, последнюю, используйте APPLY, CROSS, если вы хотите только записи с Таблицей3, OUTER, если вы хотите, чтобы они даже без нее.
SELECT
RIGHT(
REPLICATE('0', 8)
+ CAST(
(SELECT MAX(CAST(Code AS INT)) FROM Table1)
+ ROW_NUMBER() OVER (ORDER BY U_PosNo)
AS VARCHAR)
, 8),
T3.LPrice,
CASE
WHEN [Table2].[MaInC] = 1 THEN [Table2].[MatIdColumn]
ELSE [T3].[Column2] END
FROM Table2
CROSS /*OUTER*/ APPLY(
SELECT TOP 1 * FROM Table3
WHERE [TABLE3].[ItemCode] = [Table2].[U_ItmNo]
ORDER BY DateField DESC
) T3