Синхронизировать каркас триггеров вставки с Yii2 не работает

я использовал Sql Server с PHP рамки для синхронизации онлайн базы данных с локальной базой данных. Я сделал заявку в .net Framework и использовал Microsoft SyncFramework синхронизировать две базы данных. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что всякий раз, когда база данных предоставляется, создаются таблицы отслеживания вместе с триггерами и хранимыми процедурами. Вся функциональность создания перестает работать в приложении PHP. Я использовал следующее условие в YII, чтобы сохранить еще кое-что в приложении фреймворка YII.

if ($loaded && $model->save()) {
}

$model->save() всегда возвращает false и не возвращает никакой ошибки. С другой стороны, когда я пытаюсь вставить запись в базу данных, используя .Net Framework, она возвращает true. Так что я думаю, что в настоящее время есть что-то, что имеет конфликт с $model->save() триггера вставки YII и SQL, сделанного Sync Framework.

Любые указатели для решения этой проблемы будут оценены.

Заметка Проблема возникает только с триггером вставки. Триггер обновления и удаления работает нормально. Во-вторых, даже в триггере вставки записи вставляются в базу данных

Хранимая процедура

/****** Object:  StoredProcedure [dbo].[branch_bulkinsert]    Script Date: 08/19/2017 3:56:13 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[branch_bulkinsert]
@sync_min_timestamp BigInt,
@sync_scope_local_id Int,
@changeTable [branch_BulkType] READONLY
AS
BEGIN
-- use a temp table to store the list of PKs that successfully got updated/inserted
DECLARE @changed TABLE ([ID] varchar(64), PRIMARY KEY ([ID]));

-- update/insert into the base table
MERGE [branch] AS base USING
-- join done here against the side table to get the local timestamp for concurrency check
(SELECT p.*, t.local_update_peer_timestamp FROM @changeTable p LEFT JOIN [branch_tracking] t ON p.[ID] = t.[ID]) AS changes ON changes.[ID] = base.[ID]
WHEN NOT MATCHED BY TARGET AND changes.local_update_peer_timestamp <= @sync_min_timestamp OR changes.local_update_peer_timestamp IS NULL THEN
INSERT ([ID], [sr], [branch_code], [branch_name], [created_by], [address], [is_deleted], [approved], [created_on], [application_ID]) VALUES (changes.[ID], changes.[sr], changes.[branch_code], changes.[branch_name], changes.[created_by], changes.[address], changes.[is_deleted], changes.[approved], changes.[created_on], changes.[application_ID])
OUTPUT INSERTED.[ID] INTO @changed; -- populates the temp table with successful PKs

UPDATE side SET
update_scope_local_id = @sync_scope_local_id,
scope_update_peer_key = changes.sync_update_peer_key,
scope_update_peer_timestamp = changes.sync_update_peer_timestamp,
local_update_peer_key = 0,
create_scope_local_id = @sync_scope_local_id,
scope_create_peer_key = changes.sync_create_peer_key,
scope_create_peer_timestamp = changes.sync_create_peer_timestamp,
local_create_peer_key = 0
FROM
[branch_tracking] side JOIN
(SELECT p.[ID], p.sync_update_peer_timestamp, p.sync_update_peer_key, p.sync_create_peer_key, p.sync_create_peer_timestamp FROM @changed t JOIN @changeTable p ON p.[ID] = t.[ID]) AS changes ON changes.[ID] = side.[ID]
SELECT [ID] FROM @changeTable t WHERE NOT EXISTS (SELECT [ID] from @changed i WHERE t.[ID] = i.[ID])
END
GO

Вставить триггер

/****** Object:  Trigger [dbo].[branch_insert_trigger]    Script Date: 08/19/2017 3:52:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[branch_insert_trigger] ON [dbo].[branch] FOR INSERT AS
UPDATE [side] SET [sync_row_is_tombstone] = 0, [local_update_peer_key] = 0, [restore_timestamp] = NULL, [update_scope_local_id] = NULL, [last_change_datetime] = GETDATE() FROM [branch_tracking] [side] JOIN INSERTED AS [i] ON [side].[ID] = [i].[ID]
INSERT INTO [branch_tracking] ([i].[ID], [create_scope_local_id], [local_create_peer_key], [local_create_peer_timestamp], [update_scope_local_id], [local_update_peer_key], [sync_row_is_tombstone], [last_change_datetime], [restore_timestamp]) SELECT [i].[ID], NULL, 0, @@DBTS+1, NULL, 0, 0, GETDATE() , NULL FROM INSERTED AS [i] LEFT JOIN [branch_tracking] [side] ON [side].[ID] = [i].[ID] WHERE [side].[ID] IS NULL

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]