PDA

View Full Version : ناگفته های Sql Server



sepehr.net
جمعه 28 بهمن 1390, 11:42 صبح
با سلام

Sql Server یکی از نرم افزارهاییه که نکات ریز و ترفند های زیادی میشه توش پیدا کرد که خیلی کاربردی هستن
برای همین تصمیم گرفتم تا این تاپیک رو ایجاد کنم جهت جمع آوری این نکات و ترفند ها.

امیدوارم مفید واقع بشه و دوستان هم همکاری کنن

sepehr.net
جمعه 28 بهمن 1390, 11:47 صبح
حتما تا به حال مشکل ریست نشدن ستون های Identity توی Sql Server رو داشتید!!
با این دستور میتونین اون رو ریست کنید به هر شماره ایی که دوست داشته باشید

DBCC CHECKIDENT (tablename,RESEED,number)

sepehr.net
جمعه 28 بهمن 1390, 11:51 صبح
این هم یک حرکت جالب در Sql Server
ترسیم گرافیکی در اس کیو ال



DECLARE @SSMSColourPalette table (id int, geom geometry)
DECLARE @x int = 0, @y int = 0;
WHILE @y < 10
BEGIN
WHILE @x < 10
BEGIN
INSERT INTO @SSMSColourPalette VALUES(
@y*10 + @x,
'POLYGON((' + cast(@x AS varchar(32)) + ' ' + cast(@y AS varchar(32)) + ','
+ cast(@x + 1 AS varchar(32)) + ' ' + cast(@y AS varchar(32)) + ','
+ cast(@x + 1 AS varchar(32)) + ' ' + cast(@y + 1 AS varchar(32)) + ','
+ cast(@x AS varchar(32)) + ' ' + cast(@y + 1 AS varchar(32)) + ','
+ cast(@x AS varchar(32)) + ' ' + cast(@y AS varchar(32)) + '))'
)
SET @x = @x + 1;
END
SET @x = 0;
SET @y = @y + 1;
END

SELECT * FROM @SSMSColourPalette ORDER BY id;



این یکی از ساده ترین نمونه ها بود در این زمینه ، اگه جستجو کنید نمونه های خیلی جالبتری مشاهده میکنید

sepehr.net
جمعه 28 بهمن 1390, 12:09 عصر
Sql Server Profiler

ابزاریه برای مشاهده عملیاتی که بر روی اس کیو ال انجام میشه

از منو Tools گزینه Sql Server Profiler رو انتخاب کنید ، به اس کیو ال کانکت بشید ، در پنجره باز شده گزینه Run رو بزنید ، حالا یک دستوری بر روی دیتابیس اجرا کنید ، (مثلا یک پرسجو)
مشاهده میکنید که در اس کیو ال پروفایلر همون دستور را نمایش میده با یک سری از مشخصات دیگه از جمله زمان اجرا ، سیستم اجرا کننده ، کاربر اجرا کننده و ...

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

sepehr.net
جمعه 28 بهمن 1390, 12:28 عصر
Sql Profiler ابزار خیلی مفیدیه ، ولی زمانی کارامد میشه که بتونیم اطلاعات اون رو یک جا ذخیره کنیم و از اونها استفاده کنیم
برای این کار ابتدا باید دستوراتی که Sql Profiler نمایش میده رو در یک فایل بر روی هارد ذخیره کنیم ، سپس اطلاعات ذخیره شده در اون دستور رو درون جدول اضافه کنیم
برای این کار در ابتدا کوئری زیر رو اجرا کنید (این کوری رو خود Sql Profiler جنریت میکنه ؛ به این صورت که از منوی File گزینه Export سپس گزینه Script Trace Definition و در آخر گزینه For Sql Server 2005 - 2008 R2 )

/************************************************** **/
/* Created by: SQL Profiler */
/* Date: 01/11/2011 03:11:49 PM */
/************************************************** **/

-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 100

-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share

DECLARE @EndTime DATETIME
DECLARE @OutputFileName NVARCHAR(256)

SET @OutputFileName = 'c:\MyFolder\MyTrace\SS_Trace' +

CONVERT(VARCHAR(20), GETDATE(),112) +

REPLACE(CONVERT(VARCHAR(20), GETDATE(),108),':','')

SET @EndTime = DATEADD(mi,30,getdate())

exec @rc = sp_trace_create @TraceID output, 0,
@OutputFileName, @MaxFileSize, @EndTime
if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 10, 1, @on
exec sp_trace_setevent @TraceID, 10, 6, @on
exec sp_trace_setevent @TraceID, 10, 9, @on
exec sp_trace_setevent @TraceID, 10, 10, @on
exec sp_trace_setevent @TraceID, 10, 11, @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
exec sp_trace_setevent @TraceID, 10, 15, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 17, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 6, @on
exec sp_trace_setevent @TraceID, 12, 9, @on
exec sp_trace_setevent @TraceID, 12, 10, @on
exec sp_trace_setevent @TraceID, 12, 11, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 13, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
exec sp_trace_setevent @TraceID, 12, 15, @on
exec sp_trace_setevent @TraceID, 12, 16, @on
exec sp_trace_setevent @TraceID, 12, 17, @on
exec sp_trace_setevent @TraceID, 12, 18, @on
exec sp_trace_setevent @TraceID, 17, 1, @on
exec sp_trace_setevent @TraceID, 17, 6, @on
exec sp_trace_setevent @TraceID, 17, 9, @on
exec sp_trace_setevent @TraceID, 17, 10, @on
exec sp_trace_setevent @TraceID, 17, 11, @on
exec sp_trace_setevent @TraceID, 17, 12, @on
exec sp_trace_setevent @TraceID, 17, 13, @on
exec sp_trace_setevent @TraceID, 17, 14, @on
exec sp_trace_setevent @TraceID, 17, 15, @on
exec sp_trace_setevent @TraceID, 17, 16, @on
exec sp_trace_setevent @TraceID, 17, 17, @on
exec sp_trace_setevent @TraceID, 17, 18, @on

-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Profiler'

-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- display trace id for future references
select TraceID=@TraceID
goto finish

error:
select ErrorCode=@rc

finish:
go



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

CREATE TABLE TraceData (
TextData Nvarchar(4000),

ApplicationName varchar(200),

Duration INT,

Reads INT,

Writes INT,

CPU INT,

StartTime DATETIME,

EndTime DATETIME,

)

GO

INSERT INTO TraceData

(TextData,ApplicationName,Duration, Reads, Writes, CPU, StartTime,EndTime)

SELECT LEFT(CAST(TextData as varchar(2000)),2000), ApplicationName,
Duration/1000 as Duration,Reads, Writes, CPU, StartTime,EndTime
FROM :: fn_trace_gettable('c:\MyFolder\MyTrace\SS_Trace201 11031104212.trc',1)


حالا فقط کافیه یک سلکت از جدول ساخته شده بزنید !

sepehr.net
جمعه 28 بهمن 1390, 13:25 عصر
در خصوص پست قبل یک روش دیگه هم وجود داره که الان خودم دیدم :دی
اینکه وقتی داری run میکنی تو اس کیو ال پروفایلر ، یه گزینه داره به نام Save To Table که اگه اون رو انتخاب کنیم ، همون جا جدول انتخاب میشه و خود به خود تو جدول میره
همچنین یه گزینه Save To File هم داره که مستقیما توی فایل دستورات رو مینویسه