复制定解决程序的变化空串零
-
19-09-2019 - |
题
我们有C#应用其职位,以一个数据库,该数据库复制到另一个数据库(使用合并的复制)和拥有一个定制的解决程序,这是一个存储的过程。
这是工作现在SQL Server2000年,但是当测试下SQL服务器2005年的定义解决程序正在尝试改变的任何空varchar列null(和失败,因为这种特殊列不允许null).
注意,这些varchar fields不是那些引起冲突,因为他们是当前空在两个数据库,并不是正在改变和存储的过程不会改变他们的(它所做的是试图设置的价值的另一个钱列)。
有没有人碰到这个问题,或具有例子的一个存储的过程,这将留下的空串,因为他们是什么?
实际存储程序相当简单,并重新计算的客户余额在发生冲突。
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)
解决方案
你有几种选择在这里,每一位的解决方法从我的研究似乎表明一个问题SQL服务器。
1-改变这种声明: Select * From Customer Where rowguid= @rowguid
向明确提到的每个列,使用"函数",为犯罪的领域
2-修改的列表中添加一个默认的约束"。这是什么将这样做,是如果你试图插入一个'null',它将代替其与空字符串
3添加一个'前插入'触发这将改变该数据之前插入,不包含一个'null'了
PS:你是积极的,复制系统已列标记为"需要"?我想如果不是必需的,这将插入'null'如果没有数据存在。
不隶属于 StackOverflow