ON و OFF کردن Identity برای ستون ID

ON و OFF کردن Identity برای ستون ID

در هنگام طراحی یک جدول از دیتابیس که یک ستون کلید اولیه (Primary Key) دارد (مثلاً ستون می‌خواهیم ستون ID‌ را به عنوان کلید اولیه یک جدول انتخاب کنیم)، باید برای آن ستون خاصیت Identity را ON کنیم تا دو ردیف با ID‌ یکسان ثبت نشود. با انجام این در هنگام اضافه شدن هر سطر به جدول ستون ID در به طور اتوماتیک مقدار جدیدی بدست می‌آورد.

اما ممکن است که در شرایطی لازم داشته باشیم که مقدار ID را خودمان ثبت کنیم. در نتیجه باید خاصیت Identity را OFF کنیم. برای انجام این کار به مثال زیر توجه کنید:

جدول Persons را در نظر بگیرید:

P_Id

LastName

FirstName

Address

City

1

Hansen

Ola

 

Sandnes

2

Svendson

Tove

Borgvn 23

Sandnes

3

Pettersen

Kari

 

Stavanger

 

حال ما ردیف دوم از این جدول را پاک می‌کنیم:

P_Id

LastName

FirstName

Address

City

1

Hansen

Ola

 

Sandnes

3

Pettersen

Kari

 

Stavanger

 

حال می‌خواهیم یک ردیف به این جدول اضافه کنیم که P_Id آن برابر با ۲ باشد. همان طور می‌دانیم، این کار غیر ممکن است. مگر اینکه خاصیت Identity ستون P_Id برداشته شود. برای انجام این کار دستور زیر را می‌نویسیم:

set IDENTITY_INSERT Persons on

با انجام این کار می‌توان یک ردیف با شماره P_Id = 2 ثبت کرد. فقط دقت داشته باشید پس از انجام این کار حتماً دستور زیر را اجرا نمائید:

set IDENTITY_INSERT Persons off

در غیر این صورت ممکن است ردیف‌هایی با P_Id تکراری بوجود بیاید که خیلی خطرناک است.

شروع شماره گزاری از ابتدا برای ستون ID

معمولاً در جداول مختلف از ستون ID برای مشخص شدن یک ردیف خاص استفاده می‌شود. و در صورتی که یک ردیف پاک شود، دیگر نمی‌توان یک ردیف با همان شماره ID ایجاد کرد.

حال فرض کنید که یک جدول با یک میلیون ردیف را پاک کرده و می‌خواهیم بار دیگر اطلاعات جدیدی در آن ذخیره کنیم. دراین صورت شماره ID برابر با ۱۰۰۰۰۰۱ خواهد بود.

که در این صورت ممکن است، مقادیر ID نا مطلوب باشند.

در صورتی که بخواهیم شماره ID ها را از یک عدد خاص شروع کنیم باید به شکل زیر عمل کنیم:

DBCC CHECKIDENT(TableName,reseed,From)

در دستور بالا TableName نام جدولی است که می‌خواهیم ستون ID آن را ریست کنیم و From نیز یک عدد صحیح است که ID از عدد بعد ازآن شروع می‌شود.

مثال: با نوشتن دستور زیر، پس از INSERT کردن جدید، ID جدول Inventory_Stock، عدد ۱ خواهد شد.

 

DBCC CHECKIDENT(Inventory_Stock,reseed,0)

 

انتخاب یک دیتابیس به عنوان دیتابیس پیشفرض

انتخاب یک دیتابیس به عنوان دیتابیس پیشفرض

وقتی که دکمه New Query در برنامه SQL SERVER را می‌زنیم، دیتابیس master به طور پیشفرض انتخاب شده است که برای کوئری زدن بر روی یک دیتابیس دیگر یا باید آن دیتابیس از لیست دیتابیس‌ها انتخاب شود و یا از کلمه USE برای انتخاب دیتابیس مورد نظر استفاده شود.

اما می‌توان دیتابیس پیشفرض را به شکل زیر تغییر داد تا هر بار مجبور نباشیم دیتابیس را تغییردهیم:

۱- در پنجره Object Explorer و در پوشه server (که در واقع نام سرور است)، پوشه Security را باز کرده و در پوشه Login، کاربر sa را دو بار کلیک می‌کنیم.

۲- در پنجره باز شده گزینه Default Database را انتخاب کرده و دکمه OK را کلیک می‌کنیم.

متغیرها در SQL

متغیرها در SQL

برای تعریف متغیر در SQL به شکل زیر عمل می‌کنیم:

DECLARE @Varient BIGINT

 

که @Varient نام متغیر و BIGINT نوع آن است.

برای مقداردهی به یک متغیر نیز به شکل زیر عمل می‌کنیم:

SET @Varient = 124

When – Case

When – Case

در بعضی مواقع می‌خواهیم که در SQL در یک سری شرایط یک مقدار و در یک سری شرایط دیگر مقداری دیگر و باز هم در شرایط دیگر، مقادیر دیگر و ... را به ما برگرداند. برای انجام این کار از دستور When – Case استفاده می‌کنیم.

CASE AmortizationType WHEN 1 THEN ‘مستقیم’ WHEN 2 THEN ‘صعودی’ WHEN 3 THEN ‘نزولی

 

مثال: جدول Asset_AssetObservation را در نظر بگیرید.

AmortizationTypeAmortizationRateID
11010
21011
31012

این در حالی است که مقدار AmortizationType از یک جدول دیگر بدست می‌آید. در آن جدول در صورتی که AmortizationType برابر با ۱ باشد، مقدار «مستقیم»، در صورتی که برابر با ۲ باشد مقدار «صعودی» و درصورتی که برابر با ۳ باشد مقدار «نزولی» بدست می‌آید.

حال ما دستور SELECT رابه شکل زیر نوشته:

SELECT  ID,  AmortizationRate,  (CASE AmortizationType WHEN 1 THEN ‘مستقیم’ WHEN 2 THEN ‘صعودی’ WHEN 3 THEN ‘نزولی’) FROM Asset_AssetObservation

 

و در نتیجه خواهیم داشت:

AmortizationTypeAmortizationRateID
مستقیم1010
صعودی1011
نزولی1012

یکی از مزایای این دستور، برای وقتی است که بخواهید اطلاعاتی را در قالب جدول به مشتری ارائه کنید.

مثلاً من لازم داشتم که اطلاعاتم را در قالب یک فایل اکسل به مشتری می‌دادم. در نتیجه اگر می‌خواستم که که فیلد نوع استهلاک (AmortizationRate) را به عنوان یک عدد به مشتری بدهم، زیاد جالب نبود. در نتیجه از این دستور برای تبدیل مقادیر عددی به مقادیری که لازم داشتم استفاده کردم.


حذف فایل پشتیبان SQL

حذف فایل پشتیبان SQL

SQL SERVER برای انجام کارهای خودش، یک فایل پشتیبان دارد که در آن فایل، کلیه کارهای انجام شده را ثبت می‌کند. برای مثال در صورتی که ما یک دستور INSERT را اجراکنیم، SQL SERVER در یک جدول یک ردیف اضافه کرده و عملیات انجام شده را ثبت می‌کند.

با استفاده از این فایل می‌توان پی برد که چه کارهایی بر روی دیتابیس انجام شده است.

حال ممکن است پس از گذشت مدت زمان خاصی، حجم این فایل زیاد شده و مشکل ساز شود. برای حذف این فایل باید به روش زیر عمل کرد:

۱- در SQL SERVER بر روی دیتابیس راست کلیک کرده و از منوی Tasks گزینه Detach را انتخاب می‌کنیم. در پنحره باز شده دکمه OK را کلیک می‌کنیم. با انجام این کار دیتابیس از لیست دیتابیس‌ها حذف می‌شود.

۲- در مسیر :

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA

فایل Database.ldf که Database در واقع نام دیتابیس است را پاک می‌کنیم.

۳- در SQL SERVER بر روی پوشه Databases راست کلیک کرده و Attach را انتخاب می‌کنیم.

۴- در پنجره Attach Database دکمه Add را کلیک کرده و در مسیر

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA

فایل Database.mdf که Database در واقع نام دیتابیس است را انتخاب کرده و دکمه OK را زده و درپنجره Attach Database نیز دکمه OK را انتخاب می‌کنیم.

با انجام این کار فایل پشتیبان دیتابیس پاک شده و دیتابیس بار دیگر یک فایل ldf برای پشتیبان گیری خودش، ایجاد می‌کند.

آموزش نکات متفرقه SQL

قصد دارم توی چند تا پست، اطلاعاتی در مورد SQL Server رو تو وبلاگ قرار بدم.

دستورات Insert و Update و Delete تو SQL‌ جزو دستورات اساسی هستند و تو بیشتر جاها در مورد اونا صحبت شده.

این اطلاعاتی که من می‌خوام ارائه کنم، در مورد دستورات و کارهایی هست که کمتر در مورد اونا صحبت شده. ولی ممکنه که روزی به کار بیاد. همون جور که برای من هم به کار اومده و خیلی مفید بوده.

پس شروع می‌کنیم.