PDA

View Full Version : مقاله: درج داده های آزمایشی در جداول



محمد سلیم آبادی
شنبه 07 شهریور 1388, 23:03 عصر
حتما تا حالا شده است که بخواهید ده ها سطر آزمایش در جداول بانکتان درج کنید. ولی آیا این کار را به غیر روش دستی انجام داده اید؟ امروز من به این موضوع خواهم پرداخت

فرض کنید ما جداول زیر را داریم (جدول خلبانان، جدول هواپیما ها و جدول سفرها یا پرواز flight)



eclare @plane table
(
planeID int identity(1,1),
planeName nvarchar(15) not null
)
Declare @pilot table
(
pilotID int identity(1,1),
pilotName nvarchar(15) not null,
rank int not null
)
Declare @travels table
(
planeID int,
pilotID int,
date datetime,
primary key(planeID, pilotID, date)
)


ما می خواهیم چند سطر در جدول خلبانان و هواپیما ها درج کنیم و مقدار ستون rank مربوط به جدول خلبانان را می خواهیم به طور تصادفی از range صفر تا 100 انتخاب کنیم:


Declare @rank table
(a int)

Insert into @rank
select top 100 row_number() over (order by id)
from sysobjects

Insert into @pilot
select 'pilot 1', (select top 1 * from @rank order by newid()) union all
select 'polot 2', (select top 1 * from @rank order by newid()) union all
select 'polot 3', (select top 1 * from @rank order by newid())


حالا فرض کنید می خواهیم تنها با استفاده از داده های موجود در جداول خلبانان و هواپیما چندین سطر را در جدول سفرها درج کنیم، این کار را با استفاده از cross join به راحتی می توانیم انجام دهیم:


Insert into @plane
select 'plane 1' union all
select 'plane 2' union all
select 'plane 3'

Insert into @travels (planeID, pilotID, date)
select planeid, pilotid, date=getdate()
from @plane cross join @pilot p
where p.rank > 10


حالا وقت آن رسیده است که یک نگواهی به داده های جداولمان بکنیم:


select * from @plane
select * from @pilot
select * from @travels
/*

planeID planeName
----------- ---------------
1 plane 1
2 plane 2
3 plane 3

pilotID pilotName rank
----------- --------------- -----------
1 pilot 1 43
2 polot 2 66
3 polot 3 74

planeID pilotID date
----------- ----------- -----------------------
1 1 2009-09-01 11:20:26.123
1 2 2009-09-01 11:20:26.123
1 3 2009-09-01 11:20:26.123
2 1 2009-09-01 11:20:26.123
2 2 2009-09-01 11:20:26.123
2 3 2009-09-01 11:20:26.123
3 1 2009-09-01 11:20:26.123
3 2 2009-09-01 11:20:26.123
3 3 2009-09-01 11:20:26.123

*/

علیرضا مداح
یک شنبه 08 شهریور 1388, 04:37 صبح
سلام دوست عزیز،
اگر از Visual Studio Team Edition For Database Professionals(با نام Data Dude) استفاده کنید، ویژگی جالبی با نام Data Generation Plan در آن وجود دارد که به شما امکان ایجاد داده ها را با انعطاف پذیری بالایی می دهد:
MSDN - Data Generation Plans (http://msdn.microsoft.com/en-us/library/aa833211(VS.80).aspx)

Test Data Generation with Data Dude by Dinesh Priyankara (http://sqlserveruniverse.com/content/ADMN0100212262007DataGenerationwithDataDude.aspx)
http://sqlserveruniverse.com/utility/images/article_images/ADMN01002_07.PNG
،/

محمد سلیم آبادی
یک شنبه 08 شهریور 1388, 12:08 عصر
سلام آقای مداح،
تشکر از پاسختان،
شنیدم با استفاده از Actual PC هم می شود یک test lab را ایجاد (setup) کرد، شما اطلاعاتی در این مورد دارید؟