Вы можете использовать awk для выполнения чего-то подобного.
awk '/#include/ && !done { print "#include \"newfile.h\""; done=1;}; 1;' file.c
Объяснение:
/#include/ && !done
Запускает оператор действия между {}, когда строка соответствует "#include" и мы еще не обработали его.
{print "#include \"newfile.h\""; done=1;}
Это печатает #include "newfile.h", нам нужно избежать кавычек. Затем мы устанавливаем переменную done в 1, поэтому мы не добавляем больше включений.
1;
Это означает «распечатать строку» - пустое действие по умолчанию для печати $ 0, которое выводит весь текст линия. Один лайнер и легче понять, чем sed IMO: -)
SQL Server не допускает псевдонимы в UPDATE
. Вам необходимо использовать предложение FROM
:
UPDATE CM
SET ILCHDRNUM = --incorrect syntax near SET and =
(SELECT ILCHDRNUM FROM VM1DTA.DCIAPF WHERE INCHDRNUM = CM.CHDRNUM)
FROM VM1DTA.DCIRGPF CM;
UPDATE CM --invalid column name cm
SET ILPYCLT = --incorrect syntax near SET and =
(SELECT CLNTKEY
FROM dbo.DCIARG
WHERE CLNTKEY = CM.PAYCLT AND
SEQNUMB = 1
)
FROM dbo.DCIRPG CM;
Вы можете попробовать выполнить следующие действия:
UPDATE CM
SET CM.ILCHDRNUM = DCI.ILCHDRNUM
from VM1DTA.DCIRPG CM
INNER JOIN VM1DTA.DCIARG DCI ON DCI.INCHDRNUM = CM.CHDRNUM
и второй запрос
UPDATE CM
SET CM.ILPYCLT = DCI.CLNTKEY
FROM dbo.DCIRPG CM
INNER JOIN dbo.DCIARG DCI
ON DCI.CLNTKEY = CM.PAYCLT
AND DCI.SEQNUMB = 1
. В качестве альтернативы:
UPDATE RPG
SET RPG.ILCHDRNUM = ARG.ILCHDRNUM
FROM VM1DTA.DCIRPG AS RPG
INNER JOIN VM1DTA.DCIARG AS ARG
ON RPG.CHDRNUM = ARG.INCHDRNUM;
UPDATE RPG
SET RPG.ILPYCLT = ARG.CLNTKEY
FROM dbo.DCIRPG AS RPG
INNER JOIN dbo.DCIARG AS ARG
ON RPG.PAYCLT = ARG.CLNTKEY
AND ARG.SEQNUMB = 1;
Кроме того, кто бы ни назвал эти таблицы и столбцы, ему нужно выехать за сарай. Может быть, несколько.