আমি কীভাবে একটি টিএসকিউএল নির্বাচনে প্রতিটি সারির জন্য এলোমেলো সংখ্যা তৈরি করব?


328

আমার টেবিলে প্রতিটি সারির জন্য আমার আলাদা আলাদা এলোমেলো নম্বর দরকার। নিম্নলিখিত আপাতদৃষ্টিতে সুস্পষ্ট কোড প্রতিটি সারির জন্য একই র্যান্ডম মান ব্যবহার করে।

SELECT table_name, RAND() magic_number 
FROM information_schema.tables 

আমি এটি থেকে একটি INT বা একটি ফ্লোট পেতে চাই। গল্পের বাকী অংশটি আমি একটি পরিচিত তারিখ থেকে অফসেট র‌্যান্ডম তারিখ তৈরির জন্য এই র‌্যান্ডম নম্বরটি ব্যবহার করতে যাচ্ছি, যেমন একটি শুরুর তারিখ থেকে 1-14 দিনের অফসেট।

এটি মাইক্রোসফ্ট এসকিউএল সার্ভার 2000 এর জন্য।


4
এটির কোনও সমাধান রয়েছে যা নতুনড () ব্যবহার করে না? আমি একটি প্রদত্ত বীজের জন্য এলোমেলো সংখ্যার একই ক্রম উত্পন্ন করতে সক্ষম হতে চাই।
ররি ম্যাকলিউড

@ ররি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করুন, এটি আরও মনোযোগ পেতে হবে। (আমার উত্তর র্যান্ডম সংখ্যা, উদাঃ নির্দিষ্ট টেবিল ব্যবহার করতে হবে উদাহরণস্বরূপ এই র্যান্ডম সংখ্যা বিখ্যাত মানক সেট। Rand.org/pubs/monograph_reports/MR1418/index.html )
MatthewMartin


২০০৫ সালে RAND প্রবর্তিত হয়েছিল, ২০০৯ সালে এই প্রশ্নটি জিজ্ঞাসা করা হয়েছিল, কোন সংস্থাগুলি এখনও এসকিউএল 2000 ব্যবহার করেছেন কারণ এটি চিরকাল ব্যবহারের পক্ষে যথেষ্ট উপযুক্ত সংস্করণ ছিল।
ম্যাথিউমার্টিন

ররি ম্যাকলিউড জিজ্ঞাসা করলেন, "এর কি এমন কোনও সমাধান রয়েছে যা NEWID () ব্যবহার করে না? আমি একটি নির্দিষ্ট বীজের জন্য এলোমেলো সংখ্যার একই ক্রম উত্পন্ন করতে সক্ষম হতে চাই।" উত্তর হ্যাঁ, তবে এটি কিছুটা বিশৃঙ্খল। ১) এমন একটি ভিউ তৈরি করুন যা র‌্যান্ড (সিলেক্ট) নির্বাচন করে (২) একটি ইউডিএফ তৈরি করুন যা ভিউ থেকে মান নির্বাচন করে। ৩. আপনার ডেটা নির্বাচন করার আগে, র্যান্ড () ফাংশনটি বীজ করুন। ৪. আপনার নির্বাচিত বিবৃতিতে ইউডিএফ ব্যবহার করুন। আমি নীচে একটি সম্পূর্ণ উদাহরণ পোস্ট করব
মিতসেল্প্লিক

উত্তর:


516

কটাক্ষপাত SQL সার্ভার - ভিত্তিক র্যান্ডম সংখ্যা সেট করুন যা খুবই বিস্তারিত ব্যাখ্যা আছে।

সংক্ষিপ্তসার হিসাবে, নিম্নলিখিত কোডটি 0 থেকে 13 এর মধ্যে একটি অভিন্ন বিতরণ সহ অন্তর্ভুক্ত সহ এলোমেলো সংখ্যা উত্পন্ন করে:

ABS(CHECKSUM(NewId())) % 14

আপনার পরিসীমা পরিবর্তন করতে, কেবল প্রকাশের শেষে নম্বরটি পরিবর্তন করুন। আপনার যদি এমন একটি পরিসরের প্রয়োজন হয় যা ইতিবাচক এবং নেতিবাচক উভয় সংখ্যা অন্তর্ভুক্ত করে তবে অতিরিক্ত সতর্কতা অবলম্বন করুন। যদি আপনি এটি ভুল করে থাকেন তবে 0 নম্বরটি দ্বিগুণ গণনা করা সম্ভব।

ঘরে গণিত বাদামের জন্য একটি ছোট্ট সতর্কতা: এই কোডটিতে খুব সামান্য পক্ষপাত রয়েছে। CHECKSUM()স্কেল ইন্ট ডাটাটাইপের পুরো পরিসীমা জুড়ে অভিন্ন সংখ্যার ফলাফল বা কমপক্ষে আমার (সম্পাদক) পরীক্ষাটি দেখতে পারা যায় তার কাছাকাছি। তবে, কিছুটা পক্ষপাত হবে যখন CHECKSUM () এই ব্যাপ্তির একেবারে শীর্ষে একটি সংখ্যা তৈরি করে। যখনই আপনি সর্বাধিক সম্ভাব্য পূর্ণসংখ্যার এবং আপনার সর্বাধিক পূর্ণসংখ্যার আগে আপনার পছন্দসই পরিসরের আকারের শেষ সঠিক একাধিকের মধ্যে একটি সংখ্যা পান (এই ক্ষেত্রে 14), ফলাফলগুলি আপনার পরিসরের অবশিষ্ট অংশের চেয়ে বেশি পছন্দসই হয় যা থেকে উত্পাদন করা যায় না 14 এর শেষ একাধিক।

উদাহরণস্বরূপ, কল্পনা করুন যে সমস্ত প্রকারের পূর্ণ পরিসংখ্যান কেবলমাত্র 19 19 যখন CHECKSUM () এর ফলাফল 14-15-এ আসে, এগুলি ফলাফল 0-5-এর সাথে মিলে যায়। এই সংখ্যাগুলি -13-১৩-এরও বেশি ভারী হয়ে উঠবে , কারণ চেকসাম () তাদের উত্পন্ন করার দ্বিগুণ। এটি দৃশ্যমানভাবে প্রদর্শন করা সহজ। নীচে আমাদের কাল্পনিক পূর্ণসংখ্যার পরিসরের ফলাফলগুলির সম্পূর্ণ সম্ভাব্য সেটটি দেওয়া হল:

চেকসাম পূর্ণসংখ্যা: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 19
ব্যাপ্তি ফলাফল: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 0 1 2 3 4 5

আপনি এখানে দেখতে পারেন যে অন্যদের তুলনায় কিছু সংখ্যক উত্পাদন করার সম্ভাবনা রয়েছে: পক্ষপাতিত্ব। ধন্যবাদ, ইন্ট টাইপের আসল পরিসর অনেক বড় ... এত বেশি যে বেশিরভাগ ক্ষেত্রে পক্ষপাত প্রায় অন্বেষণযোগ্য। তবে, আপনি যদি কখনও গুরুতর সুরক্ষা কোডের জন্য নিজেকে এই কাজটি করতে দেখেন তবে সচেতন থাকার বিষয়।


28
এই লিঙ্কযুক্ত পৃষ্ঠার সমাধান ছিল: এবিএস (চেকসাম (নিউআইডি ()))% 14
ম্যাথিউমার্টিন

7
% 14 0 এবং 13 এর মধ্যে নম্বরগুলি ফিরে আসবে
কোডারডেনিস

7
@ ডেনিস পামার, মাত্র 1
কেএম যুক্ত করুন।

59
আমরা এইটির সাথে একটি প্রতিভা বাগ আবিষ্কার করেছি। যেহেতু চেকসাম কোনও ইনট ফেরত দেয়, এবং কোনও ইন্টির পরিসর -2 ^ 31 (-2,147,483,648) থেকে 2 ^ 31-1 (2,147,483,647) হয়, ফলগুলি ঠিক -2,147,483,648 হতে গেলে অ্যাবস () ফাংশন একটি ওভারফ্লো ত্রুটি ফিরে আসতে পারে ! সম্ভাবনাগুলি স্পষ্টতই খুব কম, 4 বিলিয়ন প্রায় 1, তবে আমরা এটি প্রতিদিন ~ 1.8b সারি টেবিলের উপর দিয়ে চালাচ্ছি, সুতরাং এটি সপ্তাহে একবারে ঘটছিল! ফিক্সটি হ'ল চেকসামটি অ্যাবস-এর আগে বিগিন্টে ফেলে দেওয়া।
এভিলপুটপাস্টার

17
আমি মনে করি এটির উচিত "ইউনিফর্ম বিতরণ" "নরমাল ডিস্ট্রিবিউশন" নয় - প্রতিটি সংখ্যার সমান সম্ভাবনা রয়েছে, এটি ঘন্টার বক্রতা নয়। "সাধারণীকরণ" এর একটি নির্দিষ্ট গাণিতিক অর্থ রয়েছে।
আরেকটি পার্কার 20'17

95

যখন একক ব্যাচে একাধিকবার কল করা হয়, র্যান্ড () একই সংখ্যাটি দেয়।

আমি রূপান্তর ( varbinary, newid()) বীজ যুক্তি হিসাবে ব্যবহার করার পরামর্শ দেব :

SELECT table_name, 1.0 + floor(14 * RAND(convert(varbinary, newid()))) magic_number 
FROM information_schema.tables

newid() একই ব্যাচের মধ্যে এমনকি প্রতিটি বার যখন ডাকা হয় তখন এটি আলাদা মানের ফেরত দেওয়ার গ্যারান্টিযুক্ত, সুতরাং এটি বীজ হিসাবে ব্যবহার করা র্যান্ডকে প্রম্পট করবে () প্রতিটি সময় আলাদা মান দিতে।

1 থেকে 14 এ এলোমেলো পুরো নম্বর পেতে সম্পাদিত।


আপনি কীভাবে কোনও গাইড বা ভেরিবিনারি থেকে একটি নম্বর পাবেন? আমি পূর্ণসংখ্যার প্রত্যাশার জন্য প্রশ্নটি আপডেট করব।
ম্যাথিউমার্টিন

1
আপনি এটি একটি সংখ্যা দ্বারা গুণিত এবং এটি মেঝে :) তাই আপনি যদি পাঁচটি সংখ্যা চান, 100000 দ্বারা গুণিত এবং একটি int রূপান্তর করুন। কুরুচিপূর্ণ, তবে যথেষ্ট সহজ।
জেরেমি স্মিথ

1
আরও সংযোজন হিসাবে - এটি আপনাকে পাঁচ অঙ্ক পর্যন্ত দেবে - আপনি যদি এটি শূন্য-প্যাড করতে চান তবে আপনাকে একটি চর ডেটাটাইপ ব্যবহার করতে হবে, এবং পাঁচ অঙ্ক পর্যন্ত শূন্য-প্যাডে প্রতিলিপি ব্যবহার করতে হবে।
জেরেমি স্মিথ

আপনি যদি মেঝে পরিবর্তে সিলিং ফাংশনটি ব্যবহার করেন তবে আপনাকে 1 যুক্ত করতে হবে না
পোপড্যারেন

এমনকি আমি যখন এটি ব্যবহার করি তখনও অনেক সময় থাকে যে র্যান্ড () সর্বদা আমাকে একই ফলাফল দেয়। এমনকি অপরিচিত, অনেক সময় আছে যে আমি এটি ব্যবহার করে যাচ্ছি তার উপর নির্ভর করে এটি একটি ভুল থেকে একটি ভুল আচরণের দিকে ঝাঁপিয়ে পড়ে। আমি
এলোমেলোভাবে অভ্যন্তরীণ যোগদানের

72
RAND(CHECKSUM(NEWID()))

উপরেরটি 0 এবং 1 এর মধ্যে একটি (সিউডো-) এলোমেলো সংখ্যা উত্পন্ন করবে exclusive যদি একটি নির্বাচনের ক্ষেত্রে ব্যবহার করা হয়, কারণ প্রতিটি সারির জন্য বীজের মান পরিবর্তিত হয়, এটি প্রতিটি সারির জন্য একটি নতুন এলোমেলো সংখ্যা উত্পন্ন করবে (তবে প্রতি সারিতে একটি অনন্য নম্বর উত্পন্ন করার গ্যারান্টি নেই)।

10 এর উপরের সীমাটির সাথে সংযুক্ত হয়ে উদাহরণ (1 - 10 সংখ্যার উত্পাদন করে):

CAST(RAND(CHECKSUM(NEWID())) * 10 as INT) + 1

লেনদেন-এসকিউএল ডকুমেন্টেশন:

  1. CAST(): https://docs.microsoft.com/en-us/sql/t-sql/funitions/cast-and-convers-transact-sql
  2. RAND(): http://msdn.microsoft.com/en-us/library/ms177610.aspx
  3. CHECKSUM(): http://msdn.microsoft.com/en-us/library/ms189788.aspx
  4. NEWID(): https://docs.microsoft.com/en-us/sql/t-sql/function/newid-transact-sql

39

1000 এবং 9999 এর মধ্যে এলোমেলো সংখ্যা জেনারেশন:

FLOOR(RAND(CHECKSUM(NEWID()))*(9999-1000+1)+1000)

"+1" - উপরের আবদ্ধ মানগুলি অন্তর্ভুক্ত করতে (পূর্ববর্তী উদাহরণের জন্য 9999)


উপরের FLOOR(RAND(CHECKSUM(NEWID()))*(10000-1000)+1000)
সীমানাটি

20

পুরানো প্রশ্নের উত্তর দেওয়া, তবে এই উত্তরটি আগে সরবরাহ করা হয়নি, এবং আশা করি এটি কোনও অনুসন্ধান ইঞ্জিনের মাধ্যমে এই ফলাফলগুলি সন্ধান করার জন্য কার্যকর হবে।

এসকিউএল সার্ভার ২০০৮ এর সাথে একটি নতুন ফাংশন চালু করা হয়েছে CRYPT_GEN_RANDOM(8), যা ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী এলোমেলো সংখ্যা তৈরি করতে ক্রিপ্টোএপিআই ব্যবহার করে, হিসাবে ফিরে আসে VARBINARY(8000)। ডকুমেন্টেশন পৃষ্ঠাটি এখানে: https://docs.microsoft.com/en-us/sql/t-sql/function/crypt-gen-random-transact-sql

সুতরাং একটি এলোমেলো নম্বর পেতে, আপনি কেবল ফাংশনটি কল করতে পারেন এবং প্রয়োজনীয় প্রকারে এটি কাস্ট করতে পারেন:

select CAST(CRYPT_GEN_RANDOM(8) AS bigint)

বা float-1 এবং +1 এর মধ্যে পাওয়ার জন্য আপনি এই জাতীয় কিছু করতে পারেন:

select CAST(CRYPT_GEN_RANDOM(8) AS bigint) % 1000000000 / 1000000000.0

13

র‌্যান্ড () ফাংশনটি একই র্যান্ডম সংখ্যা উত্পন্ন করবে, যদি কোনও সারণী নির্বাচন করুন কোয়েরিতে ব্যবহৃত হয়। আপনি যদি র‌্যান্ড ফাংশনে বীজ ব্যবহার করেন তবে একই প্রয়োগ হয়। এটি করার একটি বিকল্প উপায়, এটি ব্যবহার করছে:

SELECT ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) AS [RandomNumber]

এখান থেকে তথ্য পেয়েছেন , যা সমস্যাটি খুব ভালভাবে ব্যাখ্যা করে।


5

আপনি প্রতিটি সারিতে একটি পূর্ণসংখ্যা মান রেখেছেন যা আপনি বীজ হিসাবে RAND ফাংশনে যেতে পারেন?

1 থেকে 14 এর মধ্যে পূর্ণসংখ্যা পেতে আমার বিশ্বাস এটি কাজ করবে:

FLOOR( RAND(<yourseed>) * 14) + 1

এটি তত্ত্ব হিসাবে কাজ করে, তবে RAND(<seed>)বাস্তবে আমি খুঁজে পেয়েছি যে ছোটখাটো পরিবর্তনের জন্য খুব এলোমেলো বলে মনে হয় না <seed>। উদাহরণস্বরূপ একটি দ্রুত পরীক্ষা আমি করেছিলাম: আমি <seed>184380, 184383, 184386 এবং এর সাথে সম্পর্কিত RAND(<seed>)মানগুলি হ'ল: 0.14912, 0.14917, 0.14923।
কপিরালহুমান072889

হতে পারে আরও কিছু "আপাতদৃষ্টিতে" এলোমেলো ফলাফল পেতে, এর মতো কিছু চেষ্টা করুন:RAND(<seed>)*100000) - FLOOR(RAND(<seed>)*100000)
ক্রেটিয়ানহিউম্যান072889

5

আপনার বীজ সংরক্ষণ করার দরকারে যাতে এটি প্রতিবার "একই" র্যান্ডম ডেটা উত্পন্ন করে, আপনি নিম্নলিখিতটি করতে পারেন:

1. এমন একটি ভিউ তৈরি করুন যা র‌্যাণ্ডটি নির্বাচন করে ()

if object_id('cr_sample_randView') is not null
begin
    drop view cr_sample_randView
end
go

create view cr_sample_randView
as
select rand() as random_number
go

২. একটি ইউডিএফ তৈরি করুন যা ভিউ থেকে মান নির্বাচন করে।

if object_id('cr_sample_fnPerRowRand') is not null
begin
    drop function cr_sample_fnPerRowRand
end
go

create function cr_sample_fnPerRowRand()
returns float
as
begin
    declare @returnValue float
    select @returnValue = random_number from cr_sample_randView
    return @returnValue
end
go

৩. আপনার ডেটা নির্বাচন করার আগে, র্যান্ড () ফাংশনটি বীজ করুন এবং তারপরে আপনার নির্বাচিত বিবৃতিতে ইউডিএফ ব্যবহার করুন।

select rand(200);   -- see the rand() function
with cte(id) as
(select row_number() over(order by object_id) from sys.all_objects)
select 
    id,
    dbo.cr_sample_fnPerRowRand()
from cte
where id <= 1000    -- limit the results to 1000 random numbers

4

RAND (seedInt) এ একটি বীজ মান ব্যবহার করার চেষ্টা করুন। RAND () কেবলমাত্র প্রতি বারে একই সংখ্যাটি দেখায় সেজন্য প্রতি বিবৃতি একবারই কার্যকর করা হবে।


সহজ! যদিও মান মনে আরো অনেক বিক্ষিপ্ত, যে মাঝখানে, মত থেকে সংখ্যা ব্যবহার করে RIGHT(CONVERT(BIGINT, RAND(RecNo) * 1000000000000), 2) (নোট: আমি দেখছি RIGHTপরোক্ষভাবে রূপান্তর BIGINTকরার CHAR, কিন্তু কঠোর হতে, আপনি অন্য আছে চাই CONVERTসেখানে)।
ডগ_ইভিসন

4

আপনার যদি এটি পূর্ণসংখ্যার হতে না পারে তবে কোনও এলোমেলো অনন্য শনাক্তকারী, আপনি ব্যবহার করতে পারেন newid()

SELECT table_name, newid() magic_number 
FROM information_schema.tables

4

আপনাকে প্রতিটি সারির জন্য RAND () কল করতে হবে। এখানে একটি ভাল উদাহরণ

https://web.archive.org/web/20090216200320/http://dotnet.org.za/calmyourself/archive/2007/04/13/sql-rand-trap-same-value-per-row.aspx


মৃত লিঙ্ক :( উত্তরে অন্তর্ভুক্ত করা যায় এমন কোনও অনুলিপি?
জোকুল

তিনি RAND()একটি দৃশ্যে রাখেন SELECT, সেই দৃশ্যের একটিটিকে একটি ফাংশনে রাখেন এবং তারপরে যে কোনও জায়গা থেকে ফাংশনটি কল করে। চালাক।
ডগ_ইভিসন

আমি একটি সমাধান পোস্ট করেছি যা সংযুক্ত নিবন্ধের মতো সমস্যাটি ঠিক ঠিক একইভাবে সমাধান করে, তবে এখানে এই পোস্টে সরাসরি পাঁচটি পোস্টের আগে উত্তর হিসাবে! কেউ আমাকে চালাক বলা দ্বেষ মুখ Hehe
Mitselplik

4
select round(rand(checksum(newid()))*(10)+20,2)

এখানে এলোমেলো সংখ্যা 20 এবং 30 এর মধ্যে আসবে roundtwo দুটি দশমিক স্থান সর্বোচ্চ দেবে।

আপনি যদি নেতিবাচক সংখ্যা চান তবে আপনি এটি দিয়ে করতে পারেন

select round(rand(checksum(newid()))*(10)-60,2)

তারপরে ন্যূনতম মান হবে -60 এবং সর্বোচ্চ হবে -50।


3

এটি এতটা সহজ:

DECLARE @rv FLOAT;
SELECT @rv = rand();

এবং এটি 0-99 এর মধ্যে একটি টেবিলের মধ্যে একটি এলোমেলো সংখ্যা রাখবে:

CREATE TABLE R
(
    Number int
)

DECLARE @rv FLOAT;
SELECT @rv = rand();

INSERT INTO dbo.R
(Number)
    values((@rv * 100));

SELECT * FROM R

2

নির্বাচিত "উত্তর" দিয়ে আমার মাঝে মাঝে যে সমস্যাটি হয় তা হ'ল বিতরণটি সর্বদা এমনকি হয় না। আপনার যদি প্রচুর সারিগুলির মধ্যে এলোমেলোভাবে 1 - 14 বিতরণের প্রয়োজন হয় তবে আপনি এটির মতো কিছু করতে পারেন (আমার ডাটাবেসে 511 টেবিল রয়েছে তাই এটি কাজ করে। আমরা হব):

SELECT table_name, ntile(14) over(order by newId()) randomNumber 
FROM information_schema.tables

এই ধরণের সাধারণ র্যান্ডম সমাধানগুলির বিপরীতে এই অর্থে যে এটি সংখ্যাগুলিকে ক্রমান্বয়ে রাখে এবং অন্যান্য কলামকে এলোমেলো করে দেয়।

মনে রাখবেন, আমার আমার ডাটাবেসে 511 টি টেবিল রয়েছে (যা কেবলমাত্র খ / সি আমরা তথ্য_সেমিমা থেকে নির্বাচন করছি)। যদি আমি পূর্বের ক্যোয়ারীটি নিই এবং এটি একটি টেম্প টেবিল # X এ রাখি এবং তারপরে ফলাফলটি ডেটাতে এই কোয়েরিটি চালাও:

select randomNumber, count(*) ct from #X
group by randomNumber

আমি এই ফলাফলটি পেয়েছি, তা দেখিয়ে আমার এলোমেলো সংখ্যাটি অনেকগুলি সারির মধ্যে সমানভাবে বিতরণ করা হয়েছে:

এখানে চিত্র বর্ণনা লিখুন


2
select ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) as [Randomizer]

সবসময় আমার জন্য কাজ করেছে



1
    DROP VIEW IF EXISTS vwGetNewNumber;
    GO
    Create View vwGetNewNumber
    as
    Select CAST(RAND(CHECKSUM(NEWID())) * 62 as INT) + 1 as NextID,
    'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'as alpha_num;

    ---------------CTDE_GENERATE_PUBLIC_KEY -----------------
    DROP FUNCTION IF EXISTS CTDE_GENERATE_PUBLIC_KEY;  
    GO
    create function CTDE_GENERATE_PUBLIC_KEY()
    RETURNS NVARCHAR(32)
    AS 
    BEGIN
        DECLARE @private_key NVARCHAR(32);
        set @private_key = dbo.CTDE_GENERATE_32_BIT_KEY();
        return @private_key;
    END;
    go

---------------CTDE_GENERATE_32_BIT_KEY -----------------
DROP FUNCTION IF EXISTS CTDE_GENERATE_32_BIT_KEY;  
GO
CREATE function CTDE_GENERATE_32_BIT_KEY()
RETURNS NVARCHAR(32)
AS 
BEGIN
    DECLARE @public_key NVARCHAR(32);
    DECLARE @alpha_num NVARCHAR(62);
    DECLARE @start_index INT = 0;
    DECLARE @i INT = 0;
    select top 1 @alpha_num = alpha_num from vwGetNewNumber;
        WHILE @i < 32
        BEGIN
          select top 1 @start_index = NextID from vwGetNewNumber;
          set @public_key = concat (substring(@alpha_num,@start_index,1),@public_key);
          set @i = @i + 1;
        END;
    return @public_key;
END;
    select dbo.CTDE_GENERATE_PUBLIC_KEY() public_key;

দুঃখিত @ আর্ট আমি যদি ভালভাবে ব্যাখ্যা না করি,
আইচাক খোরি

দুঃখিত @ আর্টেন্ট, আমাদের এখানে দুটি ফাংশন রয়েছে সিটিডিএনএনএনএসআইআরএজে_স_বিআইকেইওয়য় যা একটি 32 বিট বর্ণচিহ্ন কী তৈরি করে (আরও কম বাড়াতে পারে) এবং অন্যটি সিটিডিএনএনএএনরজেজেপব্লিক_কেই বলে যা প্রথম ফাংশনটি কল করে 32 বিটের পাবলিক কী ফিরিয়ে দেয় বা আপনি ফিরে আসতে পারেন ১ bit বিটের একটি ব্যক্তিগত কী ... আপনার কেবলমাত্র সরকারী কী হিসাবে dbo.CTDE_GENERATE_PUBLIC_KEY () নির্বাচন করতে হবে ; যুক্তিটির পিছনে যুক্তিটি হ'ল আমরা বর্ণমালার অক্ষর তালিকা থেকে 32 বার একটি চরিত্র নির্বাচন করি এবং এলোমেলো বর্ণমালা কী পাওয়ার জন্য তাদের একসাথে যুক্ত করে তুলি। গবেষণা পরে।
আইছাক খুরী

খুশী হলাম। এই ব্যাখ্যা এটি একটি আরও ভাল উত্তর তোলে। (কেউ মুছে ফেলার জন্য এটি পতাকাঙ্কিত করেছে; আমি এটিকে খোলা রেখে ভোট দিয়েছি এবং সেই মন্তব্যটি আপনার জন্য রেখে দিয়েছি।)
আর্ট

0

এটা চেষ্টা কর:

SELECT RAND(convert(varbinary, newid()))*(b-a)+a magic_number 

যেখানে aনিম্ন সংখ্যা এবং bএটি শীর্ষ নম্বর


1
কোনও প্রশ্নের উত্তর দেওয়ার সময় আপনি আরও পরিষ্কার হওয়ার চেষ্টা করতে পারেন?
ইউনূস তেমুরলেঙ্ক

0
Update my_table set my_field = CEILING((RAND(CAST(NEWID() AS varbinary)) * 10))

1 এবং 10 এর মধ্যে সংখ্যা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.