PDA

View Full Version : ایجاد کردن رندوم اعداد و اسامی



irpersian20
دوشنبه 26 فروردین 1392, 23:07 عصر
سلام
وقت بخیر
من دارم جداول رو با T-SQL و با استفاده از loop پر میکنم. مثلا تعداد 500 رکورد.
حالا میخواهم رندوم باشد. یعنی همش Test نشود.
آیا امکان دارد یک سری اسامی بدهیم با هم تداخل دهد و وارد کند؟
من فقط سعی کردم و توانستم معمولی پر کنم یعنی عدد رو افزایش دهم و قرار دهم
حتی ali1
ali2
ali3
نشد. یعنی نتونستم اون متغیر را + رشته مد نظرم کنم. میشه دستور را بفرمائید؟
این لینک استفاده کردم
http://msdn.microsoft.com/en-us/library/ms177610.aspx
http://msdn.microsoft.com/en-us/library/ms178642.aspx
راه حل یا ایده ای مد نظر ندارید؟
ممنون دوستان :قلب:

یوسف زالی
دوشنبه 26 فروردین 1392, 23:30 عصر
سلام.


with CTE as
(
select 1 as N
union all
select N +1
from CTE
where N < 10
)
insert into TBL
select 'ali' + CAST(left(NEWID(), 8) as varchar(8))
from CTE

pashna
سه شنبه 27 فروردین 1392, 08:33 صبح
سلام،
این رو هم میتونید امتحان کنید :


DECLARE @j INT = 0
DECLARE @i VARCHAR(6) = ''
WHILE @j < 5
BEGIN
SELECT @i = @i + CHAR(CEILING((SELECT RAND()) * 26) + 64)
SET @j = @j + 1
END
SELECT @i

irpersian20
سه شنبه 27 فروردین 1392, 16:55 عصر
ببخشید اما منظور من این نیست.
فرض میکنیم یک جدول داریم به نام S
شامل یک کلید اصلی به نام p#
جدول دوم با نام K و یک کلید اصلی a#
جدول SK شامل دو کلید خارجی a# و p# حاصل شده از جدول 1 و 2 و یک کلید اصلی m#
جدول S دارای p# از 1 تا 10
جدول K دارای a# از 30 تا 40
الان میخوام جدول SK رو پر کنم با یک while
به نظرم بهتر هست که عدد تصادفی بین 1 تا 10 برای جدول p#
و عدد تصادفی برای جدول a# تولید کنم. بین 30 تا 40
سپس در جدول SK با یک حلقه while داده رو بریزم.
یک لطفی بکنید بفرمائید باید چه کار کرد. داغون شدم از ارور.!!!
جدول نام هم اگر بتونم نام تصادفی درست کنم بهتره یا حداقل ali 1
ali2
این الحاق رشته ali به شماره رو نمیدانم چطوره!

pashna
چهارشنبه 28 فروردین 1392, 09:45 صبح
سلام، کوئری زیر اعداد تصادفی بین ۱ تا ۱۰ تولید می‌کنه :


DECLARE @i INT = 0
WHILE @i < 10
BEGIN
SET @i = @i + 1
SELECT CONVERT(INT, RAND()*10)
END

pashna
چهارشنبه 28 فروردین 1392, 09:53 صبح
اینم اعداد تصادفی بین ۳۰ تا ۴۰ تولید می‌کنه :


DECLARE @i INT = 0
WHILE @i < 10
BEGIN
SET @i = @i + 1
SELECT CAST((40 - 30 + 1) * RAND() AS INTEGER) + 30
END

یوسف زالی
چهارشنبه 28 فروردین 1392, 15:06 عصر
لینک تصویری که دادید مسدوده.
شما دارید محتوای جدول سوم رو از ضرب داخلی دو جدول دیگه پر می کنید؟
درست متوجه شدم؟
یعنی دو جدول با محتوای اعداد، جدول سوم Junction اینها با فیلد اضافه ای به اسم "نام"؟
اگر نه، اصلا متوجه نشدم چی می خواهید.

irpersian20
چهارشنبه 28 فروردین 1392, 23:14 عصر
سلام
لینک جدید
http://www.upload.tehran98.com/img1/pudtfssb7mj0cjehk8li.jpg

یوسف زالی
پنج شنبه 29 فروردین 1392, 01:20 صبح
این مثال رو ببینید:




declare @P table(P# int, Name varchar(10))
declare @S table(S# int, DB varchar(10))
declare @PS table(P# int, S# int, Total varchar(10))

insert into @P
select top 5 row, 'g' + CAST(row as varchar(10))
from
(
select cast(ROW_NUMBER() over(order by id) as varchar(10)) row
from sys.sysobjects
) A

insert into @S
select top 5 row +9, 'd' + CAST(row +9 as varchar(10))
from
(
select cast(ROW_NUMBER() over(order by id) as varchar(10)) row
from sys.sysobjects
) A

insert into @PS
select P#, S#, Name + ' ' + DB
from @P cross join @S

select *
from @P

select *
from @S

select *
from @PS