У нас есть приложение C #, которое отправляет сообщения в базу данных, которая реплицируется в другую базу данных (с использованием репликации слиянием) и имеет один пользовательский преобразователь, который является хранимой процедурой.
Это нормально работало в SQL Server 2000, но при тестировании в SQL Server 2005 настраиваемый распознаватель пытается изменить пустые столбцы varchar на нулевые (и при неудачном завершении этого конкретного столбца недопустимые значения).
Обратите внимание, что эти поля varchar не являются теми, которые вызывают конфликт, поскольку они в настоящее время пусты в обеих базах данных и не изменяются, и хранимая процедура не изменяет их (все, что она делает, пытается установить значение другого денежный столб).
Кто-нибудь сталкивался с этой проблемой, или есть пример хранимой процедуры, которая оставит пустые строки, как они есть?
Фактическая хранимая процедура довольно проста и пересчитывает баланс клиента в случае конфликта.
ALTER procedure [dbo].[ReCalculateCustomerBalance]
@tableowner sysname,
@tablename sysname,
@rowguid varchar(36),
@subscriber sysname,
@subscriber_db sysname,
@log_conflict INT OUTPUT,
@conflict_message nvarchar(512) OUTPUT
AS
set nocount on
DECLARE
@CustomerID bigint,
@SysBalance money,
@CurBalance money,
@SQL_TEXT nvarchar(2000)
Select @CustomerID = customer.id from customer where rowguid= @rowguid
Select @SysBalance = Sum(SystemTotal), @CurBalance = Sum(CurrencyTotal) From CustomerTransaction Where CustomerTransaction.CustomerID = @CustomerID
Update Customer Set SystemBalance = IsNull(@SysBalance, 0), CurrencyBalance = IsNull(@CurBalance, 0) Where id = @CustomerID
Select * From Customer Where rowguid= @rowguid
Select @log_conflict =0
Select @conflict_message ='successful'
Return(0)