بالأمس شعرت بالإحباط بسبب عدم مزامنة قاعدة البيانات. المكتبات المستخدمة للتطوير والاختبار ليست هي نفسها في المكتبة المطورة، ويتم تحديث الإجراءات المخزنة بشكل متكرر. في بعض الأحيان يتغير هيكل الجدول.
وهذا يؤدي إلى العديد من المشاكل. لفترة من الوقت، لم أكن أعرف ما هي المشكلة بالتحديد، مما جعلني أشعر بالحرج الشديد، وفجأة أردت أن أكتب برنامجًا لمقارنة الاختلافات بين المكتبتين لتسهيل الاختبار والتنفيذ.
كنت أكتب هذا الصباح أثناء وجودي في اجتماع، واجتزت الاختبار عند الظهر
بشكل أساسي عبارة SQL:
SQL مع هياكل مختلفة للجدول وعرض وسمات الأعمدة في مكتبة الاستعلام هي كما يلي:
حدد A. [name] كـ TableName،
ب. [الاسم] باسم Colname،
ب.xtype،
ب.نوع المستخدم،
ب. الطول،
ب.كوليد،
ب.cdefault،
ب. المجال،
رقم ب،
ب.إزاحة،
ب.الحالة،
نوع ب،
ب.نوع المستخدم،
ب.بريك،
ب. مقياس،
ب.يتم حسابه،
ب.إيسوتبارام،
ب. غير قابل للإلغاء،
ج.COLUMN_DEFAULT،
dbo.fnIsColumnPrimaryKey(B. [ID]، B. [name]) كـ PKey
من كائنات النظام A، وأعمدة النظام B، وINFORMATION_SCHEMA .COLUMNS C
حيث a.id = B.id
وA.xtype في ('u'، 'v')
و A. الاسم = C.TABLE_NAME
وB. الاسم = C.COLUMN_NAME
ترتيب حسب A. [المعرف]، B. [الاسم]
///////
معنى كل عمود هو كما يلي
name sysname اسم العمود أو اسم معلمة الإجراء.
id int معرف كائن الجدول الذي ينتمي إليه هذا العمود، أو معرف الإجراء المخزن المرتبط بهذه المعلمة.
xtype tinyint نوع التخزين الفعلي في أنواع النظام.
typestat tinyint للاستخدام الداخلي فقط.
xusertype Smallint معرف نوع البيانات الموسع المحدد من قبل المستخدم.
length Smallint الحد الأقصى لطول التخزين الفعلي في أنواع النظام.
xprec tinyint للاستخدام الداخلي فقط.
xscale tinyint للاستخدام الداخلي فقط.
عمود صغير ملون أو معرف المعلمة.
xoffset Smallint للاستخدام الداخلي فقط.
bitpos tinyint للاستخدام الداخلي فقط.
محفوظة tinyint للاستخدام الداخلي فقط.
كولستات سميلينت للاستخدام الداخلي فقط.
cdefault int معرف القيمة الافتراضية لهذا العمود.
domain int القاعدة أو التحقق من معرف القيد لهذا العمود.
number Smallint رقم العملية الفرعية عندما يتم تجميع العملية (يشير 0 إلى عناصر غير عملية).
colorder Smallint للاستخدام الداخلي فقط.
متغير تلقائي (255) للاستخدام الداخلي فقط.
إزاحة صغيرة إن إزاحة الصف الذي يقع فيه هذا العمود إذا كانت سالبة، تشير إلى صف متغير الطول.
الصورة النقطية للحالة tinyint التي تصف سمات العمود أو المعلمة:
0x08 = العمود يسمح بالقيم الخالية.
0x10 = تكون حشوة ANSI سارية المفعول عند إضافة عمود varchar أو varbinary. يحافظ على المسافات الزائدة لأعمدة varchar والأصفار الزائدة للأعمدة المتغيرة.
0x40 = المعلمة هي معلمة الإخراج.
0x80 = العمود هو عمود الهوية.
اكتب tinyint نوع التخزين الفعلي في systypes.
usertype Smallint معرف نوع البيانات المعرفة من قبل المستخدم في systypes.
printfmt varchar(255) للاستخدام الداخلي فقط.
prec Smallint مستوى دقة هذا العمود.
مقياس كثافة العمليات عدد المنازل العشرية لهذا العمود.
يتم حساب علامة int التي تشير إلى ما إذا كان العمود قد تم حسابه أم لا:
0 = غير محسوبة.
1 = محسوبة.
يشير isoutparam int إلى ما إذا كانت معلمة الإجراء هي معلمة إخراج:
1 = صحيح.
0 = خطأ.
يشير int isnullable إلى ما إذا كان العمود يسمح بالقيم الخالية:
1 = صحيح.
0 = خطأ.
COLUMN_DEFAULT القيمة الافتراضية
مفتاح PKey الأساسي.
////////
يتم استخدام الوظائف التالية:
--------------------------
إنشاء وظيفة dbo.fnIsColumnPrimaryKey(@sTableID int, @nColumnName varchar(128))
- تغيير الدالة dbo.fnIsColumnPrimaryKey(@sTableName varchar(128), @nColumnName varchar(128))
يعود قليلا
مثل
يبدأ
أعلن @nTableID int،
@nIndexID int،
@أنا كثافة العمليات
تعيين @nTableID = @sTableID--OBJECT_ID(@sTableName)
SELECT @nIndexID = indid
من فهارس النظام
أين المعرف = @nTableID
و إنديد بين 1 و 254
AND (الحالة & 2048) = 2048
إذا كانnIndexID فارغًا
العودة 0
إذا @nColumnName IN
(اختر الشوري.[الاسم]
من sysindexkeys سيك
INNER JOIN syscolumns sc ON sik.id = sc.id وsik.colid = sc.colid
أين sik.id = @nTableID
و سيك.indid = @nIndexID)
يبدأ
العودة 1
نهاية
العودة 0
نهاية
--------------------------
من خلال عبارة SQL هذه، يمكنك معرفة سمات الأعمدة لجميع الجداول في قاعدة البيانات.
من خلال تنفيذ عبارة SQL هذه مرتين على التوالي، يمكن استرجاع ومقارنة سمات الأعمدة الموجودة في المكتبتين.
-------------------------------------------------- ---------------
بالنسبة للإجراءات والوظائف المخزنة، استخدم عبارات SQL التالية:
حدد * من كائنات النظام حيث يتم ترتيب xtype ('P'،'TF'،'IF'،'FN') حسب [الاسم]
يمكن الاستعلام عن كافة الإجراءات وأسماء الوظائف المخزنة. نتائج الاستعلام الحلقي
في كل حلقة، يتم تخزين اسم الوظيفة أو الإجراء المخزن في سلسلة SpobjectName، ثم يتم استدعاء الإجراء المخزن: sp_helptext كما يلي:
exec sp_helptext '" +SpobjectName+"'
إرجاع جدول يحتوي على محتوى النص في الإجراء SpobjectName المخزن. يتوافق صف واحد من النص في الإجراء المخزن مع صف واحد في الجدول.
قم بتنفيذ جميع SPs والوظائف باستخدام exec sp_helptext للحصول على رموز جميع الإجراءات والوظائف المخزنة.
ما عليك سوى وضع النتائج في جدول ومقارنة أوجه التشابه والاختلاف.
المرجع: كتب SQL Server عبر الإنترنت
<التوليد الآلي للإجراءات المخزنة في قاعدة البيانات>( http://www.vckbase.com/document/viewdoc/?id=1111 )
الآن نقوم فقط بمقارنة سمات أعمدة الجداول وطرق العرض، بالإضافة إلى الإجراءات والوظائف المخزنة.
لم يتم تنفيذ علاقة القيد بين جداول المقارنة.
سيتم إضافتها لاحقا.