العزم المخصص النسخ المتماثل يغير سلاسل فارغة إلى Nulls

StackOverflow https://stackoverflow.com/questions/1509193

سؤال

لدينا تطبيق C # الذي ينشر قاعدة بيانات يتم نسخها نسخ نسخ متماكم إلى قاعدة بيانات أخرى (باستخدام دمج النسخ المتماثل) ولديه حل مخصص واحد وهو إجراء مخزن.

كان هذا يعمل بشكل جيد تحت SQL Server 2000، ولكن عند الاختبار تحت SQL Server 2005 يحاول المحلل المخصص تغيير أي أعمدة فارغة فارغة ليكون غير فارغة (وفشل كوس هذا العمود المعين لا يسمح ب Nulls).

لاحظ أن هذه الحقول 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)
هل كانت مفيدة؟

المحلول

لديك بعض الخيارات هنا، كل منها بعض الشيء من ما يبدو أن بحثي هو مشكلة مع SQL Server.

1- تغيير هذا البيان: Select * From Customer Where rowguid= @rowguid لذكر صراحة كل الأعمدة، واستخدام "ISNULL" للحقول المخالفة

2- تغيير العمود في الجدول لإضافة عائق افتراضي ل "''. ما سيفعله هذا، إذا حاولت إدراج "Null"، فسيحل محله بالسلسلة الفارغة

3- إضافة "قبل إدراج" الزناد الذي سيغير البيانات قبل الإدراج، وعدم احتواء "Null" بعد الآن

ملاحظة: هل أنت إيجابي أن يكون نظام النسخ المتماثل هذا العمود الذي تم وضع علامة عليه بأنه "مطلوب"؟ أعتقد أنه إذا لم يكن الأمر غير مطلوب، فسيتم إدراج "NULL" إذا لم يكن هناك بيانات موجودة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top