Оператор Microsoft Sql Server с использованием MERGE выполняется для таблицы, но никогда для другой таблицы - PullRequest
1 голос
/ 01 ноября 2019

В приведенном ниже коде у меня есть два запроса Microsoft SQL Server Server, включенных в хранимую процедуру, первый запрос выполняется как талисман, но второй запрос никогда не выполняется, я удостоверяюсь, что обе таблицы имеют данные внутри и соответствует условию iположить, код выполняется и возвращает успех

create procedure sp_ProcApps
@Cheque cheque readonly,
@Advances advance readonly
as     
begin transaction 
begin try


MERGE INTO apps_ AS application
USING @Cheque c ON application.appid= c.appid 

WHEN MATCHED THEN
UPDATE 
SET  application.Reaudit=0,application.Id = c.id,application.status=6,application.closed=1;


MERGE INTO apps_ AS application1
USING @Advances adv ON application1.appid= adv.appid 

WHEN MATCHED THEN
UPDATE 
SET  application1.reaudit=0,application1.status=6,application1.closed=1,application1.Id =14  ;




SELECT @IsOK='s'
COMMIT;
end TRY
BEGIN CATCH
SELECT @IsOK='f'
ROLLBACK;
END CATCH

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Я бы не использовал MERGE только для обновления. Оператор MERGE имеет некоторые проблемы (https://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/) и на самом деле здесь не нужен. Использование объединений намного проще.

UPDATE a
SET Reaudit = 0
    , Id = c.id
    , status = 6
    , closed = 1
from apps a
join @Cheque c on c.appid = a.appid

UPDATE a
SET reaudit = 0
    , status = 6
    , closed = 1
    , Id =14
from apps_ AS a
join @Advances adv ON a.appid= adv.appid
0 голосов
/ 01 ноября 2019

Наконец я смог найти ошибку, что у второго определенного типа таблицы был обратный порядок между столбцами AppId и Id, хотя они имеют одинаковые имена в фрагменте c #, который отправляет параметры в sql, я переупорядочил столбец в определенной таблице sqlвведите, как они отправляются из таблицы данных C #, и у меня это работает, и ответ выше простой ответ 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...