arşiv

yazılar buna göre etiketlendi; ‘Sql’

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 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: ,

View üzerine Index ekleme

Salı, 28 Haz 2016 yorum yok
alter view [dbo].[vm_testb] WITH SCHEMABINDING
as
select card_number,	
	   right(card_number,8) as card_number_short
from dbo.TestB
GO


CREATE unique CLUSTERED INDEX vm_testb_uni
ON dbo.vm_testb (card_number)
GO

CREATE nonCLUSTERED INDEX vm_testb_not_uni
ON dbo.vm_testb (card_number_short)
go

select *
from TestB
where RIGHT(card_number,8) = 17378223

select *
from vm_testb
where card_number_short = 17378223

Ek bilgi: http://gaffarsalkim.blogspot.com.tr/2012/05/ms-sql-de-with-schemabinding.html

Categories: SQL Hakkında Tags:

SQL Server Locking Hints

Perşembe, 02 Haz 2016 yorum yok

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:

Call a webservice from TSQL (Stored Procedure) using MSXML

Salı, 10 May 2016 yorum yok
Categories: SQL Hakkında Tags:

sp_send_dbmail – File attachment max size

Çarşamba, 24 Şub 2016 yorum yok

sp_send_dbmail – File attachment or query results size exceeds allowable value of 10000000 bytes. [SQLSTATE 42000] (Error 22050).  The step failed.

Hatasının çözümü "@query_result_no_padding = 1" yapmaktır.

Categories: SQL Hakkında Tags:

Bir String Veriyi Belirli Bir Karakterle Doldurmak (Sql: Replicate)

Salı, 03 Şub 2015 yorum yok

SQL Serverda bazen bir kolon içindeki veriyi belirli bir uzunluğa kadar sabit bir karakterle doldurmaya ihtiyaç duyarız. (Replice('karaketer',adet))

Örnek:

declare @card varchar(20)
set @card = '54662'

select sonuc = @card + REPLICATE('0',20 - LEN(@card))

 

Categories: SQL Hakkında Tags: ,

NVARCHAR ve VARCHAR veri tipleri arasındaki farklar

Pazartesi, 11 Ağu 2014 yorum yok

NVARCHAR ve VARCHAR; iki veri tipi arasındaki tek fark veriyi saklama biçimleri olarak görünüyor, NVARCHAR tipinde multi-language/çokludil olarak UNICODE verileri tutmak mümkün olurken VARCHAR tipinde ise UNICODE olmayan ASCII karakterler tutuluyor.

Faydası ve zararları nelerdir? NVARCHAR tipinde her bir karakter 16bit (2 BYTE) yer kaplarken fakat UNICODE özelliği sayesinde multilingual bir veri tipi sunarken, VARCHAR tipinde her karakter 8 bit (1 BYTE) yer kaplıyor ve multi-language bir veri tipi sunmuyor.

Categories: SQL Hakkında Tags:

WITH(NOLOCK, INDEX(PK_ADISOYADI))

Cuma, 01 Ağu 2014 yorum yok
SELECT * FROM tbl_Musteri WITH(NOLOCK, INDEX(PK_ADISOYADI))

 

Categories: SQL Hakkında Tags:

SQL sa Şifresini Değiştirme

Çarşamba, 11 Haz 2014 yorum yok

SQL sa Şifresini Değiştirme: http://youtu.be/kgfT6YFh6FQ

Categories: SQL Hakkında Tags:

SQL Server 2012 Reporting Services UAC (User Access Control) Error

Perşembe, 29 May 2014 yorum yok

There are two issues that you will find out when you finish the installation of SQL Server 2012 or SQL Server 2008 R2:

  1. User ‘Domain\User’ does not have required permissions. Verify that sufficient permissions have been granted and Windows User Account Control (UAC) restrictions have been addressed.

image_thumb65

1. From Start > All Programs > Internet Explorer, Right Click and choose Run as administrator . . .

Devamı için lütfen yandaki linki kullanınız: http://www.soheib.com/technical-knowledge/sql-server-2012-reporting-services-uac-user-access-control/

 

SQL Linked Server

Cumartesi, 01 Şub 2014 yorum yok

Bazı durumlarda aynı veya farklı server lar arasında veri alış – verişi yapmamız gerektiğinde bu durum da Linked Server oluşturabiliriz.

MSSQL Server Management Studio -> Object Explorer -> Server Object ->Linked Servers ->New Linked Server

Linked Server . . .

 

 

 

 

 

 

 

devamını oku…

Categories: SQL Hakkında Tags:

SQL Günün Max Saati

Cuma, 27 Ara 2013 yorum yok
select TodaysLastTime = dateadd(day,datediff(day,0,getdate()),'23:59:59.997')

 

Categories: SQL Hakkında Tags:

HASHBYTES (Transact-SQL)

Salı, 17 Ara 2013 yorum yok

HashBytes ( '<algorithm>', { @input | 'input' } )

<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1

DECLARE @HashThis nvarchar(4000);
SELECT @HashThis = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf');
SELECT HashBytes('SHA1', @HashThis);
GO

 

Categories: SQL Hakkında Tags:

SQL – DENSE_RANK Kullanımı

Perşembe, 12 Ara 2013 yorum yok

DENSE_RANK() OVER (ORDER BY HASTA_ID) AS 'HastaNo'

Sorgu sonucunda aynı HASTA_ID ' ye sahip satırlara aynı satır sıra numarasını yazmaktadır.

Categories: SQL Hakkında Tags:

SQL Declare komutu ile table kullanımı

Cuma, 15 Kas 2013 yorum yok
declare @tablename varchar(50) 
set @tablename = 'test' 

declare @sql varchar(500)
set @sql = 'select * from ' + @tablename 
exec (@sql)

 

Categories: SQL Hakkında Tags:

SQL Alter Komutu, Tablo Üzerinde Değişiklik

Cumartesi, 12 Eki 2013 yorum yok

Mevcut tablomuzda değişiklik yapmamız gerektiği zaman "ALTER" komutu bize yardımcı olacaktır. Var olan tabloya bir alan eklemek, alanın adını, tipi ,boyutunu vs. durumunu değiştirmeye yaramaktadır.

Öncelikle örnek bir tablo oluşturalım;

CREATE TABLE Musteri(
   Id int,
   Adi vharchar(50),
   Soyadi vharchar(50),
   DogumTarihi DateTime)

Tabloya Kolon;
Eklemek: ALTER TABLE Tablo_Adı   ADD     Alan_Adı    Veri_Tip
                             Örnek: ALTER Musteri ADD Ceptel    varchar(11) null
Silmek:    
ALTER TABLE Tablo_Adı   DROP COLUMN    Alan_Adı
                             Örnek: ALTER Musteri DROP COLUMN CepTel

Veri tipini değiştirme: ALTER TABLE Tablo_Adi ALTER COLUMN Alan_Adi Yeni_Veri_Tipi 
                             Örnek: ALTER TABLE Musteri ALTER COLUMN CepTel char(11) not null

Categories: SQL Hakkında Tags:

SQL Server 2008 R2 Expire Sorunu

Pazartesi, 08 Tem 2013 yorum yok

Aşğıdaki makelede “Expire” olmuş sql sunucusunu nasıl düzeltileceğini anlatmaktadır.

SQLCoffee – Evaluation Period Has Expired

Categories: SQL Hakkında Tags:

SQL – ROW_NUMBER Kullanımı

Cumartesi, 01 Haz 2013 yorum yok

Merhabalar,

Müşteri tablosundaki müşteri adı "YAKUP" olan kayıtları listeledikten sonra projenizde kayıtları gösterirken sıra numarasını da kolon olarak göstermek isterseniz yapmanız gerek ROW_NUMBER komutunu kullanmaktır.

SELECT TOP 3 ROW_NUMBER() OVER(ORDER BY MUSTERI_ID) AS 'SATIR',* FROM MUSTERILER WHERE MUSTERI_ADI LIKE '%YAKUP%'

SATIR MUSTERI_ID MUSTERI_ADI SOYADI
1 1254 YAKUP KALEBAŞI
2 5246 YAKUP ÖZCAN
3 89756 YAKUP KARAOSMAN

Görüldüğü üzere sadece 3 kayıt ve 3 farklı MUSTERI_ID sahip kişiler listelendi. Fakat SATIR kolonu 1,2,3 . . . diye devam ettiğini görebilirsiniz.

Categories: SQL Hakkında Tags:

SQL Reporting Services – “0” (Sıfır) Bölme Hatası

Cumartesi, 01 Haz 2013 yorum yok

Diyelim ki aşağıdaki gibi bir expression var, Fields!SAYI2.Value “0” (Sıfır) gelme durumda “Division By Zero” hatası alınacaktır.

= Format((Fields!SAYI1.Value) / (Fields!SAYI2.Value),2)

Hatayı sayı2 nin sıfırdan büyük olma durumunu kontrol etmemiz halinde sorun olmayacaktır.
Bunun için IIF komutunu kullanmamız lazım.

=IIF(Fields!SAYI2.Value> 0, Format((Fields!SAYI1.Value) /(Fields!SAYI2.Value),2), “0”)

SQL Reporting Services – Datatime, Money Formating

Cumartesi, 01 Haz 2013 yorum yok

Merhabalar,

Yapılan tablo veya grafik raporlarında bazı verilerin formatlanarak gösterilmesi gerekmektedir.
Mesela; “4. Ay 123,590.58 TL” veya “22.04.1979” gibi yapılmak istenebilir.

İlgili objenin özelliklerindeki “Number” sekmesinden yapılabilmektedir.

Fakat öyle bir durum oluyor ki “4. Ay 123,590.58 TL” yazılması gerekriğinde “Expression” yapmak gerekiyor.

O zaman “Format” fonksiyonun kullanılması gerekmektedir.

Örnek;
“4. Ay 123,590.58 TL” formatında bir veriyi yazmak için
= Str(Fields!AY.Value) + “. Ay ” + Format(Sum(Fields!TUTAR.Value),”#,##0.00″) + ” TL”
şeklinde formatlamak lazım.

Money: Format(Fields!Price.Value, “#,##0.00”)
Date: Format(Fields!Date.Value, “yyyy-MM-dd”) v.b.

Bkz: http://www.dotnetspider.com/resources/42874-SSRS-SQL-Server-Reporting-Services.aspx

Veritabanı Nedir?

Pazar, 10 Şub 2013 yorum yok

Basit bir örnek vererek anlatmaya çalışayım;
Günlük hayatta kullandığımız telefon defteri verileri saklanacak ortam, içindeki kişiler ve onların bilgileri ise verileri ifade etmektedir.
Telefon defteri veritabanı ise içindeki bilgilerde verileri ifade etmektedir. Günümüzde farklı veri tabanları bulunmaktadır.

Bunlardan bazıları;

  • Microsoft SQL Server
  • Oracle
  • MySQL
  • PostgreSQL
  • Interbase
  • Progress
  • Microsoft Access
  • Categories: SQL Hakkında Tags:

    SQL Nedir?

    Cumartesi, 09 Şub 2013 yorum yok

    SQL (Eng: Structured Query Language – Tr: Yapısal Sorgulama Dili)

    Veritabanı ile birlikte veri sorgulama diline ihtiyaç duyulmuştur. SQL İBM tarafında 1975′ lerin başında unix ortamı için geliştirildi. En başlarda “SQUARE” dili geliştirildi ve bu dil matematiksel söz dizimine sahiptir. SQUARE dili, matematiksel söz dizimine sahip olduğundan bu dili herkes kullanamıyordu. Daha geniş bir kitlenin kullanabilmesi için ingilizce ye benzer bir dil geliştirildi ve SQL ortaya çıkmıştır. SQL ilişkisel veri alanında oldukça fazla kitleye hitap ettiğinden “Veri Tabanı Yönetim Sistem” lerinde ortak bir dil olmuştur.

    SQL verileri yönetmek ve tasarlamak için kullanılan bir dildir. SQL bir programlama dili değil, veritabanı ortamında kullanılan bir alt dildir.

    Categories: SQL Hakkında Tags: