arşiv

yazılar buna göre etiketlendi; ‘SQL Hakkında’

Get running job name from sysprocesses

Cuma, 06 Tem 2018 yorum yok

Get the substring of the running job from sysprocess .. have filtered out generic refresher ETC

select substring(program_name,55,7) ‘to search’
from master..sysprocesses
where program_name like ‘%agent%’ and program_name not like ‘%DatabaseMail – SQLAGENT -%’
and program_name not in (‘SQLAgent – Alert Engine’,’SQLAgent – Generic Refresher’,’SQLAgent – Email Logger’,’SQLAgent – Job invocation engine’,’SQLAgent – Job Manager’)

output will be similar to below

Output :

to search
2FE3386
A68D437
3253286

Get the job details from MSDB database by using the results you got from above query and replace them in where clause

select *
from msdb..sysjobs
where job_id like ‘%A68D437%’

OR

if you have more than one job running replace below job_id %strings%

select *
from msdb..sysjobs
where job_id like ‘%A68D437%’ or job_id like ‘%4E742EB%’ or job_id like ‘%FAEDF18%’

 

Categories: SQL Hakkında Tags:

Sql Takvim

Pazartesi, 19 Mar 2018 yorum yok
 create procedure spCalendar
     --draw a calendar as a result set. you can specify the month if you wwant
     @Date datetime=null--any date within the month that you want to calendarise.
     /*
     For Novermber 2013 it gives...
      
     Mon  Tue  Wed  Thu  Fri  Sat  Sun
     ---- ---- ---- ---- ---- ---- ----
                         1    2    3 
     4    5    6    7    8    9    10
     11   12   13   14   15   16   17
     18   19   20   21   22   23   24
     25   26   27   28   29   30
      
      
     eg. spCalendar '1 Jan 2006'
     Execute spCalendar '1 sep 2013'
     Execute spCalendar '1 nov 2013'
     Execute spCalendar '28 feb 2008'
     Execute spCalendar '1 mar 1949'
     Execute spCalendar '10 jul 2020'
      
     */
     as
     Set nocount on
     --nail down the start of the week
     Declare @MonthLength int --number of days in the month
     Declare @MonthStartDW int --the day of the week that the month starts on
     --if no date is specified, then use the current date
     Select @Date='01 '+substring(convert(char(11),coalesce(@date,GetDate()),113),4,8)
     --get the number of days in the month and the day of the week that the month starts on
     Select @MonthLength=datediff(day,convert(char(11),@Date,113),convert(char(11),DateAdd(month,1,@Date),113)),
     @MonthStartDW=((Datepart(dw,@date)+@@DateFirst-3) % 7)+1
      
     Select
     [Mon]=max(case when day=1 and monthdate between 1 and @MonthLength then convert(char(2),monthdate) else '' end),
     [Tue]=max(case when day=2 and monthdate between 1 and @MonthLength then convert(char(2),monthdate) else '' end),
     [Wed]=max(case when day=3 and monthdate between 1 and @MonthLength then convert(char(2),monthdate) else '' end),
     [Thu]=max(case when day=4 and monthdate between 1 and @MonthLength then convert(char(2),monthdate) else '' end),
     [Fri]=max(case when day=5 and monthdate between 1 and @MonthLength then convert(char(2),monthdate) else '' end),
     [Sat]=max(case when day=6 and monthdate between 1 and @MonthLength then convert(char(2),monthdate) else '' end),
     [Sun]=max(case when day=7 and monthdate between 1 and @MonthLength then convert(char(2),monthdate) else '' end)
     from
     (--roll out the day number and week number so you can then do a pivot table of the results
     Select [day]=DayNo.Number, [week]=Weekno.number,
     [monthDate]=(DayNo.Number + ((Weekno.number-1)*7))-@MonthStartDW
     from (VALUES (1),(2),(3),(4),(5),(6),(7)) AS DayNo(number)
     cross join 
      (VALUES (1),(2),(3),(4),(5),(6)) AS Weekno(number)
      
     )f
     group by [week]--so that each week is on a different row
     having max(case when day=1 and monthdate between 1 and @MonthLength then monthdate else 0 end)>0
     or (week=1 and sum(MonthDate)>-21)
     --take out any weeks on the end without a valid day in them!

 

Kaynak: https://www.red-gate.com/simple-talk/sql/learn-sql-server/robyn-pages-sql-server-datetime-workbench/

Categories: SQL Hakkında Tags: ,

Sql XML PATH

Cuma, 19 Oca 2018 yorum yok

I had a similar issue when I was trying to join two tables with one-to-many relationships. In SQL 2005 I found that XML PATH method can handle the concatenation of the rows very easily.

If there is a table called STUDENTS

SubjectID       StudentName
----------      -------------
1               Mary
1               John
1               Sam
2               Alaina
2               Edward

Result I expected was:

SubjectID       StudentName
----------      -------------
1               Mary, John, Sam
2               Alaina, Edward

I used the following T-SQL:

Select Main.SubjectID,
       Left(Main.Students,Len(Main.Students)-1) As "Students"
From
    (
        Select distinct ST2.SubjectID, 
            (
                Select ST1.StudentName + ',' AS [text()]
                From dbo.Students ST1
                Where ST1.SubjectID = ST2.SubjectID
                ORDER BY ST1.SubjectID
                For XML PATH ('')
            ) [Students]
        From dbo.Students ST2
    ) [Main]

You can do the same thing in a more compact way if you can concat the commas at the beginning and use substring to skip the first one so you don't need to do a subquery:

 

Select distinct ST2.SubjectID, 
    substring(
        (
            Select ','+ST1.StudentName  AS [text()]
            From dbo.Students ST1
            Where ST1.SubjectID = ST2.SubjectID
            ORDER BY ST1.SubjectID
            For XML PATH ('')
        ), 2, 1000) [Students]
From dbo.Students ST2

https://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string

Categories: SQL Hakkında Tags: ,

Yazdığınız script’i kaydetmeden sildiniz mi?

Pazartesi, 21 Ağu 2017 yorum yok

Yazdığınız script’i kaydetmeden sildiniz mi?
Management strudio’nu hata verip kapandı ve satırlarca sql’inizi recover edemiyor musunuz?
Temp dosyalarda bulamadınız mı?

Script’inizi bir defa çalıştırdıysanız üzülmeyin, hala kurtarabilirsiniz smiley
Nasıl mı?

Şöyle;

use [DBName]
go

select	execquery.last_execution_time as [Date Time], execsql.text as [Script] 
from	sys.dm_exec_query_stats as execquery
			CROSS APPLY sys.dm_exec_sql_text(execquery.sql_handle) AS execsql
where	convert(date,execquery.last_execution_time)='20170808'
order by execquery.last_execution_time

 

Categories: SQL Hakkında Tags: ,

Veritabanı Bilgi Havuzu

Salı, 01 Ağu 2017 yorum yok

Tüm veri tabanları hakkında başvuru kaynağı için kullanılır.

http://www.veritabani.gen.tr/

Categories: bestURL, SQL Hakkında Tags: ,

SQL Server Locking Hints

Perşembe, 13 Nis 2017 yorum yok

Merhabalar,

Sql server da yaptığımız bazı işlemler sırasında kullandığımız tabloları kilitlememiz gerekebilir. Yada kilitli bir tablodan kilidin açılmasını beklemeden sorgu çekmek isteyebiliriz. Bu gibi durumlar için kullanabileceğimiz sql server locking hint leri aşağıdaki gibidir;

HOLDLOCK = Kilitlenme işleminin transaction bitimine kadar sürmesini sağlar. Tablock gibi bazı ifadeler sadece statement bazında kilitleme yapmaktadır. Bunların transaction bazında kilitleme yapması isteniyorsa HOLDLOCK ifadesiyle beraber kullanılması gerekmektedir. HOLDLOCK, SERIALIZABLE ile aynı işi yapmaktadır.

 

NOLOCK = Kilitli bir tablodan kilidin açılmasını beklemeden kayıt çekmeye yarar. Kirli kayıt (dirty read) alınması mümkündür. Kullanımı Select * from TableName WITH (NOLOCK) şeklindedir. NOLOCK, READUNCOMMITTED ile aynı işi yapmaktadır.

PAGELOCK =  Sayfa bazında kilitleme yapmak için kullanılır.

READCOMMITTED = Kilitli tabloları kullanabilmek için kilidinin açılmasını bekler. SQL Server default udur.

READUNCOMMITTED = NoLock ile aynı işi yapar.

ROWLOCK = Kayıt bazında kilitleme yapmak için kullanılır.

SERIALIZABLE = HoldLock ile aynı işi yapar.

TABLOCK = Tablock ile lock edilen tablolarda read işlemi yapılabilirken insert ve update işlemi yapılamamaktadır. Ayrıca transaction boyutunda çalışabilmesi için holdlock ifadesi ile beraber kullanılması gerekmektedir.

TABLOCKX = Tablockx in tablock dan farkı read işleminide izin vermemesidir. Ayrıca transaction bazında çalışabilmekte dolayısıyla ekstradan holdlock ifadesine gerek kalmamaktadır.

UPDLOCK = Updlock ile locklanmış tablo larda select ve insert işlemleri yapılabilirken, update işlemi yapılamamaktadır. Statement ve transaction bazında çalışır. Transaction bazında çalışması için ayrıca HOLDLOCK ifadesine gerek yoktur.

XLOCK = Tablockx gibidir. Farkı statement da ki bütün işlemlerin bitmesini bekler. En kapsamlı lock işlemidir.

Sistemde bulunan kilitli tablolar EXEC sp_lock komutuyla görüntülenebilir.

Kaynak: http://www.caglarozenc.com/ms-sql-server/sql-server-locking-hints.html

Categories: SQL Hakkında Tags: ,

SQL Transactions

Çarşamba, 29 Mar 2017 yorum yok
TRANSACTIONS
 
Transaction’lar, aynı anda birden çok işlemin yapıldığı durumlarda, bütünü oluşturan parçalardan en az birinde hata meydana gelirse bütün işlemleri geriye almamızı sağlayan ifadelerdir.
 
Transaction ifadelerini en yaygın olarak 2 yolla oluşturmak mümkündür: Bunlardan ilki, Auto Commit Transaction; ikincisi ise Explicit Transaction’dır.
 
 Auto Commit Transaction
·         Hiçbir transaction modu tayin edilmediyse SQL Server bu modda çalışır.
·         Auto commit modunda her bir batch bir transaction bloğu olarak ele alınır.
·         Batch içerisinde bir sorun olursa da, SQL Server otomatik olarak bütün batch’i geri alır yani rollback eder.
·         INSERT,UPDATE,DELETE gibi diğer komutlardan ayrı olarak gönderilen ifadeler SQL Server tarafından otomatik olarak transaction içerisinde paketlenir. Bu tek ifadeli transaction’lar, ifade başarılı olduğunda otomatik olarak commit edilir(onaylanır) ya da runtime hatası neticesinde otomatik olarak rollback edilir(geri alınır).
 
Explicit Transaction
·         Kullanıcının TCL komutları (begin, commit,rollback) kullanarak başlattığı transaction’lardır.TCL, T-SQL'in alt kümesidir.
 
            
 

·         Batch’lerde runtime hatası olduğunda, örneğin; 2 tabloya aynı anda veri girişi yapmak istediğimizi düşünelim. Bir tanesine giriş oldu fakat sonrasında runtime hatası verdi ve ikincisine giriş olmadı.
 
   insert into … values …
   insert into … values …
   GO
   
   Bu durumda yazdığımız iki insert ifadelerini kullanıcı tanımlı transaction’ın içine sokarak bu olumsuzluktan kurtulabiliriz.  (İlgili örneğe en aşağıda ulaşabilirsiniz).
 
BEGIN TRANSACTION
·         Transaction işlemini başlatır. İşlem başarılıysa bitirmek için COMMIT TRANSACTION / COMMIT TRAN, başarısızlık durumunda bitirmek için de ROLLBACK TRANSACTION / ROLLBACK TRAN kullanılır.
·         İç içe transaction’larda eğer dış kısımdaki transaction rollback olduysa (geri alındıysa) içteki transaction da işlem görmüşse bile rollback edilir.
·         Transaction’lar COMMIT TRANSACTION ya da ROLLBACK TRANSACTION görünceye kadar devam eder ya da başlangıçtaki bağlantı kesilene kadar yani SQL Server otomatik olarak transaction’ı rollback edene kadar sürer.
 
COMMIT TRANSACTION
Başarılı olan transaciton’ı veritabanına kaydeder.
 
ROLLBACK TRANSACTION
·         Başarısız bir transaction’ın sonunda ROLLBACK komutunu kullanırız.
·         Transaction sırasında meydana gelen değişiklikleri geri almada kullanılır. Örneğin, insert, delete, update yapılan satırlar ya da create edilmiş objeler gibi.
·         CATCH bloğu içerisinde kullanılabilir.
·         Geri almadan önce (rollback), XACT_STATE fonksiyonunu kullanarak transaction’ın durumunu öğrenebiliriz. Bu CATCH bloğu içerisindeki hatalardan kaçınmamızı sağlar.
 
XACT_STATE Sonucu   Tanımı
0              Aktif kullanıcı transaction’ı yok.
1              Aktif, yürütülmekte olan transaction mevcut
                   -1              Aktif kullanıcı transaction mevcut ama hatalı. Transaction sadece geri alınabilir.
 
XACT_ABORT
Hata meydana geldiğinde SQL otomatik olarak geri alma işlemi yapmaz. Geri almak için ROLLBACK ifadesi kullanılır ya da XACT_ABORT devreye sokulur. XACT_ABORT ifadesi SQL Server runtime hatası verdiğinde yürütülmekte olan transaction’ın otomatik olarak geri alınmasını sağlar.
Default olarak XACT_ABORT kapalıdır. Bunu ayarlamak için SET komutu kullanılır.
 
       
 
 
Batch’lerden Oluşan Transaction
 
Transaction Örneği:
 
BEGIN TRY
   BEGIN TRANSACTION
      INSERT INTO Siparisler (musteriID, personelID, siparisTarihi) VALUES (1,1,’2015-08-14’);
      INSERT INTO SiparisDetay (siparisID, urunID, birimfiyat, adet) VALUES (2,4,50,150);
   COMMIT TRANSACTION;
END TRY
BEGIN CATCH
   SELECT ERROR_NUMBER(), ERROR_MESSAGE();
ROLLBACK TRANSACTION;
END CATCH;
 
Burada TRY bloğu içinde, INSERT ifadesi BEGIN TRAN ve COMMIT TRAN ifadeleri tarafından sarılmıştır. Bu INSERT ifadesinin tamamıyla başarıyla gerçekleşmesini ya da tamamıyla başarısız olmasını sağlar. Eğer herhangi bir runtime hatası vermezse, transaction gerçekleşir ve iki insert ifadesinin sonucu veritabanına işlenir. Eğer birinci INSERT işlemi sırasında hata olursa execution CATCH bloğa geçer; ikinci INSERT işlemini atlayarak CATCH bloğu içindeki ROLLBACK ifadesi transaction’ı sonlandırır. Eğer ikinci INSERT işlemi sırasında hata olursa execution CATCH bloğa geçer. İlk INSERT komutu başarıyla tamamlandığından ve satırlar Siparisler tablosuna eklendiği için ROLLBACK ifadesi başarılı olan INSERT işlemini geri alır.
 
Categories: SQL Hakkında Tags:

SQL NULLIF

Pazartesi, 25 Tem 2016 yorum yok

NULLIF kullanımı . . . 

CREATE TABLE #tmpTable (
  Id					int,
  CustomerName			varchar(50),
  identification_number varchar(11),
  tax_number			varchar(10)
  )
GO
 
INSERT #tmpTable VALUES(1,'Firma A', '12345678912', '9876543213');
INSERT #tmpTable VALUES(2,'Firma B', '', '4568529873');
INSERT #tmpTable VALUES(3,'Firma C', NUll, '9876543213');

select Id,
		CustomerName,
		isnull(identification_number, tax_number) as tax_number
from #tmpTable

select Id,
		CustomerName,
		isnull(nullif(identification_number,''), tax_number) as tax_number,
		'nullif KULLANILDIĞINDA' as info
from #tmpTable

--Farklı kullanımları var
--tax_number = '4568529873' ise NULL yapmak içinde kullanılabilir.
select Id,
		CustomerName,
		nullif(tax_number,'4568529873') as tax_number,
		'nullif KULLANILDIĞINDA' as info
from #tmpTable

 

Categories: SQL Hakkında Tags: ,

SQL Server 2008 R2 Intellisense Sorunu Ve Çözümü

Cuma, 26 Eyl 2014 yorum yok

Sql Server Deadlock Analizi ve Tespit Yöntemleri

Perşembe, 14 Ağu 2014 yorum yok