Monzer Osama
26-Jun-2011, 02:00 PM
السلام عليكم ورحمة الله
كلنا يعرف حساسية البيانات الموجودة في البرنامج وقد يقوم المستخدم أو المطور أو حتى المحاسب بعملية في البرنامج تؤثر بشكل كبير على
الـGL وعلى الموديول وقد يكون على مستوى النظام ككل
لذلك لا بد من العمل على بيئة تجريبة تجنب الكثير من المشاكل على المعلومات الحقيقة
وإليكم الطريقة:
تنبيه:
عليك أن تمتلك المهارة الكافية في الـSQL Server والـ Query Analyzer لتنفي هذه المهمة ولا تنسى بأخذ نسخة احتياطية عند كل خطوة
ببسم الله نبدأ:
1- نفتح شركة تجريبة من خلال برنامج GP Utility (على إفتراض أن اسم قاعدة بيانات الشركة X فإن اسم الشركة التجريبية سيكون TESTx)
2- بعد إنشاء الشركة ستكون طبعا خالية من الحسابات ومن كل البيانات
3-ادخل الى برنامج Enterprise Manager الذي يأتي عادة من SQL Server 2000 واعمل نسخ احتياطي لقاعدة بيانات الشركة الأصلية X وسمي الملف باسم Xbackup
4- بعد إغلاق جريت بلينز إعمل استعادة لقاعدة البيانات الأصلية Xbackup على القاعدة التجريبية TESTx
5- قم بالدخول الى برنامج Query Analyzer واختر اسم الشركة التجريبية TESTx وقم بتنفيذ الكود التالي
/************************************************** ****************************/
/* Description: */
/* Updates any table that contains a company ID or database name value */
/* with the proper values as they are stored in the DYNAMICS.dbo.SY01500 table */
/* */
/************************************************** ****************************/
if not exists(select 1 from tempdb.dbo.sysobjects where name = '##updatedTables')
create table [##updatedTables] ([tableName] char(100))
truncate table ##updatedTables
declare @acStatement varchar(255)
declare G_cursor CURSOR for
select
case
when UPPER(a.COLUMN_NAME) in ('COMPANYID','CMPANYID')
then 'update '+a.TABLE_NAME+' set '+a.COLUMN_NAME+' = '+ cast(b.CMPANYID as char(3))
else
'update '+a.TABLE_NAME+' set '+a.COLUMN_NAME+' = '''+ db_name()+''''
end
from INFORMATION_SCHEMA.COLUMNS a, DYNAMICS.dbo.SY01500 b
where
UPPER(a.COLUMN_NAME) in ('COMPANYID','CMPANYID','INTERID','DB_NAME','DBNAM E')
and b.INTERID = db_name()
set nocount on
OPEN G_cursor
FETCH NEXT FROM G_cursor INTO @acStatement
WHILE (@a@aFETCH_STATUS <> -1)
begin
insert ##updatedTables select
substring(@acStatement,8,patindex('%set%',@acStateme nt)-9)
Exec (@acStatement)
FETCH NEXT FROM G_cursor INTO @acStatement
end
DEALLOCATE G_cursor
select [tableName] as 'Tables that were Updated' from ##updatedTables
قم بالدخول الى الشركة التجريبة وابدأ بعمل تجاربك قبل أن تنفذها على الشركة الأصلية.
هذه الطريقة ستوفر عليكم الكثير من المشاكل عند تنفيذ حالات مشكوك فيهاأو تريد أن تعرف النتائج المترتبة على تنفيذها.
وفق الله الجميع لما فيه الخير
والسلام عليكم
كلنا يعرف حساسية البيانات الموجودة في البرنامج وقد يقوم المستخدم أو المطور أو حتى المحاسب بعملية في البرنامج تؤثر بشكل كبير على
الـGL وعلى الموديول وقد يكون على مستوى النظام ككل
لذلك لا بد من العمل على بيئة تجريبة تجنب الكثير من المشاكل على المعلومات الحقيقة
وإليكم الطريقة:
تنبيه:
عليك أن تمتلك المهارة الكافية في الـSQL Server والـ Query Analyzer لتنفي هذه المهمة ولا تنسى بأخذ نسخة احتياطية عند كل خطوة
ببسم الله نبدأ:
1- نفتح شركة تجريبة من خلال برنامج GP Utility (على إفتراض أن اسم قاعدة بيانات الشركة X فإن اسم الشركة التجريبية سيكون TESTx)
2- بعد إنشاء الشركة ستكون طبعا خالية من الحسابات ومن كل البيانات
3-ادخل الى برنامج Enterprise Manager الذي يأتي عادة من SQL Server 2000 واعمل نسخ احتياطي لقاعدة بيانات الشركة الأصلية X وسمي الملف باسم Xbackup
4- بعد إغلاق جريت بلينز إعمل استعادة لقاعدة البيانات الأصلية Xbackup على القاعدة التجريبية TESTx
5- قم بالدخول الى برنامج Query Analyzer واختر اسم الشركة التجريبية TESTx وقم بتنفيذ الكود التالي
/************************************************** ****************************/
/* Description: */
/* Updates any table that contains a company ID or database name value */
/* with the proper values as they are stored in the DYNAMICS.dbo.SY01500 table */
/* */
/************************************************** ****************************/
if not exists(select 1 from tempdb.dbo.sysobjects where name = '##updatedTables')
create table [##updatedTables] ([tableName] char(100))
truncate table ##updatedTables
declare @acStatement varchar(255)
declare G_cursor CURSOR for
select
case
when UPPER(a.COLUMN_NAME) in ('COMPANYID','CMPANYID')
then 'update '+a.TABLE_NAME+' set '+a.COLUMN_NAME+' = '+ cast(b.CMPANYID as char(3))
else
'update '+a.TABLE_NAME+' set '+a.COLUMN_NAME+' = '''+ db_name()+''''
end
from INFORMATION_SCHEMA.COLUMNS a, DYNAMICS.dbo.SY01500 b
where
UPPER(a.COLUMN_NAME) in ('COMPANYID','CMPANYID','INTERID','DB_NAME','DBNAM E')
and b.INTERID = db_name()
set nocount on
OPEN G_cursor
FETCH NEXT FROM G_cursor INTO @acStatement
WHILE (@a@aFETCH_STATUS <> -1)
begin
insert ##updatedTables select
substring(@acStatement,8,patindex('%set%',@acStateme nt)-9)
Exec (@acStatement)
FETCH NEXT FROM G_cursor INTO @acStatement
end
DEALLOCATE G_cursor
select [tableName] as 'Tables that were Updated' from ##updatedTables
قم بالدخول الى الشركة التجريبة وابدأ بعمل تجاربك قبل أن تنفذها على الشركة الأصلية.
هذه الطريقة ستوفر عليكم الكثير من المشاكل عند تنفيذ حالات مشكوك فيهاأو تريد أن تعرف النتائج المترتبة على تنفيذها.
وفق الله الجميع لما فيه الخير
والسلام عليكم