خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
Sequence در SQL Server
از Sequence در SQL Server برای تولید مقادیر عددی به ترتیب استفاده می شود که می تواند به ترتیب صعودی یا نزولی در یک بازه زمانی مشخص باشد و در صورت درخواست ممکن است چرخه داشته باشد. اشیاء Sequence مشابه ستون IDENTITY در هر جدول SQL هستند. با این حال ، برخلاف ستون IDENTITY ، آنها مستقل هستند و به هیچ جدولی Attach نمی شوند. اشیا Sequence هم به صورت مستقل و هم در دستورات INSERT ، UPDATE و DELETE استفاده می شوند.
Syntax ایجاد SEQUENCE در SQL server به صورت زیر می باشد:
AS : مقدار پیش فرض برای دیتاتایپ bigint می باشد. دیتاتایپ می تواند از نوع Int, SmallInt, TinyInt, BigInt, Decimal باشند.
START WITH: شروع بازه می باشد.
INCREMENT BY: می تواند مقدار منفی یا مثبت باشد. sequence یک توالی صعودی می باشد و اگر یک مقدار منفی مشخص شود ، sequence یک توالی نزولی از مقادیر خواهد بود.
MINVALUE: حداقل مقدار برای sequence
NO MINVALUE: به این معنی است که هیچ حداقل مقداری برای شی sequence مشخص نشده است.
MAXVALUE: یک پارامتر اختیاری است که حداکثر مقدار را برای sequence تعیین می کند.
NO MAXVALUE: به این معنی است که حداکثر مقدار برای sequence مشخص نشده است.
CYCLE: sequence پس از اتمام توالی دوباره شروع می شود.
NO CYCLE: عدم شروع دوباره sequence
CACHE: برای کش کردن مقادیر sequence استفاده می شود.
NO CACHE: مقادیر sequence کش نمی شوند.
خب، حالا با این توضیحات، به مثال از sequence در SQL Server می پردازیم.
در مثال زیر مشاهده می کنید که یک sequence با نام GenSeqId ایجاد می شود و sequence از نوع integer می باشد.
START WITH در این sequence از 100 بوده و INCREMENT BY آن 2 تایی میباشد.
با استفاده از عبارت زیر می توانید sequence ایجاد شده را چک کنید.
برای دیدن مقداری که GenSeqId sequence در آن قرار دارد ، از دستور زیر استفاده کنید:
حالا برای تست، یک جدول با نام EmpData ایجاد می کنیم.
اکنون تعدادی رکورد را در جدول EmpData وارد می کنیم ، برای ستون EmpId از عبارت زیر استفاده می کنیم.
حال اجازه دهید که رکوردها را select کنیم. همانطور که خروجی را مشاهده می کنید که مقدار ستون EmpId توسط GenSeqId sequence تولید شده است. شروع از 100 بوده و مقادیر 2 تایی اضافه می شد و از این رو مقادیر اضافه شده در این ستون 102 و 104 می باشد.
برای ویرایش در sequence موجود از دستور ALTER SEQUENCE استفاده می شود. اکنون مقدار GenSeqId را برای شروع دوباره به عدد 1 تغییر می دهیم. پس شروع آن از 100 یه 1 تغییر یافت.
خب، حالا با توجه به تغییری که در GenSeqId sequence دادیم، آن را چک می کنیم. همانطور که در ذیل مشاهده می کنید، GenSeqId sequence بروزرسانی شده است.
خب، حالا یک SEQUENCE دیگر با نام GenSeqNumber ایجاد می کنیم.
خب، GenSeqNumber ایجاد شده و همانطور که می بینید نوع آن int بوده و START WITH آن از 1 شروع می شود و 2 تایی با توجه به INCREMENT BY، افزایش می یابد. حداقل مقدار یا MINVALUE برای آن 1 و حداکثر مقدار 6 می باشد.
حالا اگر درصدد افزایش مقدار GenSeqNumber از 6 باشید، خطا دریافت خواهید کرد.
از آنجا که مقدار حداکثر این SEQUENCE، عدد 6 می باشد، این SEQUENCE با 3 بار اجرا شدن، خطا تولید خواهد کرد چون مقدار آن از 6 فراتر خواهد رفت.
برای جلوگیری از چنین خطاهایی می توانید از CYCLE در sequence استفاده کنید. که CYCLE در واقع یک Flag است. CYCLE را برای یک sequence به مقدار True تنظیم کنید، مقدار sequence دوباره به مقدار شروع برمیگردد و هرگز از مقدار حداکثری، تجاوز نمی کند.
برای حذف یک sequence هم می توانید از دستور DROP استفاده کنید.
Syntax ایجاد SEQUENCE در SQL server به صورت زیر می باشد:
CREATE SEQUENCE [schema].[Sequencename]
[ AS data type ]
[ START WITH value]
[ INCREMENT BY value]
[ MINVALUE value | NO MINVALUE ]
[ MAXVALUE value | NO MAXVALUE ]
[ CYCLE | NO CYCLE ]
[ CACHE value | NO CACHE ];
AS : مقدار پیش فرض برای دیتاتایپ bigint می باشد. دیتاتایپ می تواند از نوع Int, SmallInt, TinyInt, BigInt, Decimal باشند.
START WITH: شروع بازه می باشد.
INCREMENT BY: می تواند مقدار منفی یا مثبت باشد. sequence یک توالی صعودی می باشد و اگر یک مقدار منفی مشخص شود ، sequence یک توالی نزولی از مقادیر خواهد بود.
MINVALUE: حداقل مقدار برای sequence
NO MINVALUE: به این معنی است که هیچ حداقل مقداری برای شی sequence مشخص نشده است.
MAXVALUE: یک پارامتر اختیاری است که حداکثر مقدار را برای sequence تعیین می کند.
NO MAXVALUE: به این معنی است که حداکثر مقدار برای sequence مشخص نشده است.
CYCLE: sequence پس از اتمام توالی دوباره شروع می شود.
NO CYCLE: عدم شروع دوباره sequence
CACHE: برای کش کردن مقادیر sequence استفاده می شود.
NO CACHE: مقادیر sequence کش نمی شوند.
خب، حالا با این توضیحات، به مثال از sequence در SQL Server می پردازیم.
در مثال زیر مشاهده می کنید که یک sequence با نام GenSeqId ایجاد می شود و sequence از نوع integer می باشد.
START WITH در این sequence از 100 بوده و INCREMENT BY آن 2 تایی میباشد.
CREATE SEQUENCE dbo.GenSeqId
AS INT
START WITH 100
INCREMENT BY 2
با استفاده از عبارت زیر می توانید sequence ایجاد شده را چک کنید.
SELECT *
FROM sys.sequences
WHERE name = 'GenSeqId';
برای دیدن مقداری که GenSeqId sequence در آن قرار دارد ، از دستور زیر استفاده کنید:
SELECT NEXT VALUE FOR [dbo].[GenSeqId]
حالا برای تست، یک جدول با نام EmpData ایجاد می کنیم.
Create table EmpData(
EmpId int ,
EmpName varchar(100)
)
اکنون تعدادی رکورد را در جدول EmpData وارد می کنیم ، برای ستون EmpId از عبارت زیر استفاده می کنیم.
INSERT INTO EmpData VALUES ( NEXT VALUE FOR [dbo].[GenSeqId],'NICK ANTHONY')
INSERT INTO EmpData VALUES ( NEXT VALUE FOR [dbo].[GenSeqId],'JACK MARK A')
حال اجازه دهید که رکوردها را select کنیم. همانطور که خروجی را مشاهده می کنید که مقدار ستون EmpId توسط GenSeqId sequence تولید شده است. شروع از 100 بوده و مقادیر 2 تایی اضافه می شد و از این رو مقادیر اضافه شده در این ستون 102 و 104 می باشد.
SELECT * FROM EmpData
برای ویرایش در sequence موجود از دستور ALTER SEQUENCE استفاده می شود. اکنون مقدار GenSeqId را برای شروع دوباره به عدد 1 تغییر می دهیم. پس شروع آن از 100 یه 1 تغییر یافت.
ALTER SEQUENCE [GenSeqId]
RESTART WITH 1
خب، حالا با توجه به تغییری که در GenSeqId sequence دادیم، آن را چک می کنیم. همانطور که در ذیل مشاهده می کنید، GenSeqId sequence بروزرسانی شده است.
SELECT NEXT VALUE FOR [dbo].[GenSeqId]
خب، حالا یک SEQUENCE دیگر با نام GenSeqNumber ایجاد می کنیم.
CREATE SEQUENCE [dbo].[GenSeqNumber]
AS INT
START WITH 1
INCREMENT BY 2
MINVALUE 1
MAXVALUE 6
خب، GenSeqNumber ایجاد شده و همانطور که می بینید نوع آن int بوده و START WITH آن از 1 شروع می شود و 2 تایی با توجه به INCREMENT BY، افزایش می یابد. حداقل مقدار یا MINVALUE برای آن 1 و حداکثر مقدار 6 می باشد.
حالا اگر درصدد افزایش مقدار GenSeqNumber از 6 باشید، خطا دریافت خواهید کرد.
از آنجا که مقدار حداکثر این SEQUENCE، عدد 6 می باشد، این SEQUENCE با 3 بار اجرا شدن، خطا تولید خواهد کرد چون مقدار آن از 6 فراتر خواهد رفت.
Select NEXT VALUE FOR [dbo].[GenSeqNumber]
برای جلوگیری از چنین خطاهایی می توانید از CYCLE در sequence استفاده کنید. که CYCLE در واقع یک Flag است. CYCLE را برای یک sequence به مقدار True تنظیم کنید، مقدار sequence دوباره به مقدار شروع برمیگردد و هرگز از مقدار حداکثری، تجاوز نمی کند.
CREATE SEQUENCE [dbo].[GenSeqNumber]
AS INT
START WITH 1
INCREMENT BY 2
MINVALUE 1
MAXVALUE 6
CYCLE
برای حذف یک sequence هم می توانید از دستور DROP استفاده کنید.
Drop sequence [GenSeqNumber_withcycle]
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: