۱۳۸۹/۰۵/۲۸

SQL Tips-Part1

1-فیلد Identity که با منفی شروع می شود:
بر خلاف تصور خیلی ها می توان یک Identity را با صفر یا منفی شروع کرد .گرچه کار درستی نیست.


CREATE TABLE PersonIdentityNegative
(
ID INT NOT NULL IDENTITY (-50, -1),
FName VARCHAR(100) NULL,
LName VARCHAR(100) NULL
)

2-مشاهده مقدار آخرین Identity تولید شده در بانک:
تابع  Identity@@ یکی از توابع سیستمی است که خروجی آن  آخرین مقدار Identity تولید شده در بانک اطلاعاتی مشخصی است.
توجه کنید دستوراتی که باعث افزایش رکورد Identity در جداول می شوند به شرح زیر هستند:
  • Insert
  • Select Into
  • Bulk Copy

SELECT @@Identity

3-مشاهده مقدار آخرین Identity در یک جدول :
تابع Ident_Current همانند  تابع Identity@@ از توابع سیستمی است .این تابع نام یک جدول را به عنوان ورودی می پزیرد و مقدار آخرین Identity تولید شده  در یک جدول مشخص را  به عنوان خروجی تولید می کند.

SELECT Ident_Current('Your Table Name')

برای این منظور تابع دیگری وجود دارد به نام Scope_Identity که فقط در Scope حال، آخرین مقدار Identity را بر می گرداند

SELECT * FROM Person

SELECT Scope_Identity()

توجه کنید که دو تابع Ident_Current و Scope_Identity نیازی به @@ ندارند.

4-تعداد ردیف های afect شده در Command قبلی:
تابع ROWCOUNT@@ تعداد ردیف های که آخرین Command روی آنها تاثیر داشته را به عنوان خروجی تولید می کند.

SELECT * FROM Person

SELECT @@ROWCOUNT

5- (*)Count یا (1)Count  کدام یک سریع تر است:
با بررسی های که انجام دادم به این نتیجه رسیدم که  هردو در یک حد عمل می کنند ولی با بررسی جزئی تر فهمیدم که (1)Count فقط یک اجرا بیشتر از  (*)Count دارد ،یعنی فقط در همان یک اجرا ،تبدیل به  (*)Count می شود و بقیه اجرا ها یکسان است.

6- محاسبه تاریخ تولد در SQL Server:
برای این منظور یک گوئری تهیه شده که می تونید ازش استفاده کنید :


declare @birth_day datetime
set @birth_day ='19660527 12:34:22'
select
 years,
 months,
 case
 when day(@birth_day)>day(getdate())
 then day(getdate())+
 datediff(day,@birth_day,dateadd(month,datediff(month,0,@birth_day)+1,0))-1
 else day(getdate())-day(@birth_day)
 end as days,
 datepart(hour,convert(varchar(10),dateadd(minute,minutes,0),108)) as hours,
 datepart(minute,convert(varchar(10),dateadd(minute,minutes,0),108)) as minutes
from
(
select
 years,
 datediff(month,dateadd(year,years,@birth_day),getdate())+
 case
 when day(getdate())>=day(@birth_day)
 then 0
 else -1 
 end as months,
 datediff(minute,convert(varchar(8),@birth_day,108),
 convert(varchar(8),getdate(),108)) as minutes
from
(
select
 datediff(year,@birth_day,getdate()) +
 case
 when month(getdate())>=month(@birth_day)
 then 0
 else -1
 end as years
) as t
) as t

7-فیلد Identity با ترکیبی از حروف و عدد :
برای این کار می تونید از روش زیر استفاده کنید ،بدون شرح :)

DECLARE Person TABLE (
ProID as 'Pro-' + RIGHT('0000' + CONVERT(varchar, SimpleID ),5),
SimpleID int IDENTITY(1,1),
FName varchar(10)
)

INSERT INTO Person VALUES ('Ali')
INSERT INTO @Person VALUES ('Hossein')

SELECT * FROM Person

8-پیدا کردن جداولی که کلید اصلی ندارند:
بدون شرح :)

SELECT name as [TableName]
FROM sys.objects
WHERE type = 'U'
AND OBJECTPROPERTY([object_id], 'TableHasPrimaryKey') = 0;

9-پیدا کردن کلیدهای اصلی :
USE Northwind
go
SELECT ISKC.TABLE_SCHEMA, ISKC.TABLE_NAME, ISKC.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS ISTC
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ISKC
ON ISTC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND
ISTC.CONSTRAINT_NAME = ISKC.CONSTRAINT_NAME
WHERE ISKC.TABLE_NAME = 'Employees'
ORDER BY ISKC.TABLE_NAME, ISKC.ORDINAL_POSITION

10-مشاهده پیاده سازی View :
برای این عمل از طریق کد SQL دو روش وجود دارد :

روش اول : پیاده سازی یک View مشخص را به نمایش در می آورد

EXEC sp_helptext 'Your View Name'


روش دوم :پیاده سازی تمامی View ها را به همراه نام آنها نمایش می دهد

SELECT TABLE_NAME as ViewName,
VIEW_DEFINITION as ViewDefinition
FROM INFORMATION_SCHEMA.Views

Vote on iDevCenter

۴ نظر:

  1. وبلاگ شما در بخش وبلاگ های برنامه نویسی ثبت شد.
    موفق باشید

    http://persianweblog.ir/weblogs/?cat=7

    پاسخحذف
  2. سلام دوست عزیز
    از شما دعوت میکنیم لینکهای روزانه خود را در سایت مفیدترین ( شبکه برتر انتشار لینک فارسی از نظر نقدنیوز) منتشر کنید مفیدترین در بازه زمانی محدود اقدام به عضوگیری بدون دعوتنامه میکند لطفا برای انتشار لینکهای خود سریعتر اقدام فرمائید.
    با تشکر
    مفیدترین دات کام
    www.mofidtarin.com

    پاسخحذف
  3. سلام
    ممنون. جالب و مفید بود.

    پاسخحذف