我们有一个 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)