Access verilerinizi SQL Server’a geçiriyorsanız veya arka uç veritabanı olarak SQL Server kullanıp bir Access çözümü oluşturuyorsanız, Access SQL ile SQL Server Transact SQL (TSQL) arasındaki farkları bilmeniz çok önemlidir. Aşağıda çözümünüzün amaçlandığı gibi çalışması için bilmeniz gereken önemli çeşitlemeler açıklanır.
Daha fazla bilgi için bkz. Access SQL: temel kavramlar, sözcük dağarcığı ve söz dizimive Transact-SQL Başvurusu.
Söz dizimi ve ifade farklılıkları
Dönüştürme gerektiren az sayıda söz dizimi ve ifade farkı vardır. Aşağıdaki tabloda en yaygın olanları özetlenmiştir.
Fark |
Access SQL |
SQL Server TSQL |
İlişkili veritabanı özniteliği |
Çoğunlukla alan olarak adlandırılır |
Çoğunlukla sütun olarak adlandırılır |
Dize değişmez değerleri |
Tırnak ("), "Merve H. Demir" gibi |
Kesme işareti ('), 'Merve H. Demir' gibi |
Tarih değişmez değerleri |
Pound işareti (#), #1/1/2019# gibi |
Kesme işareti ('), '1/1/2019' gibi |
Birden çok joker karakter |
Yıldız işareti (*), "Mel*" gibi |
Yüzde işareti (%), 'Mel%' gibi |
Tek joker karakter |
Soru İşareti (?), "Mel?" gibi |
Alt çizgi (_), "Mel_" gibi |
Mod işleci |
MOD işleci, Değer1 MOD Değer2 gibi |
Yüzde (%), Değer1 % Değer2 gibi |
Boole değerleri |
WHERE Bitvalue = [True | False] Veya WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
Parametreler |
[<Tanımlanmış bir sütun olmayan bir ad>] Veya SQL görünümünde SQL Parametreleri Bildirimini kullanın |
@ParamAdı |
Notlar
-
Access, tablo adlarının ve nesnelerinin çevresinde tırnak işaretlerini (") kullanır. T-SQL bunları boşluklar içeren tablo adları için kullansa da bu standart bir adlandırma uygulaması değildir. Çoğu durumda nesne adlarının boşluk içermeyecek şekilde yeniden adlandırılması gerekir; ama sorgular da yeni tablo adlarını yansıtacak şekilde yeniden yazılmalıdır. Yeniden adlandırılamayan ama standart adlandırmaya da uymayan tablolar için köşeli ayraçları [ ] kullanın. Access sorgularda parametrelerin çevresine de fazladan parantezler ekler ama bunlar T-SQL'de kaldırılabilir.
-
Karakter olarak depolanan tarihler için bir ODBC standardı olan kurallı tarih biçimini (yyyy-aa-gg ss:dd:sn) kullanmayı göz önünde bulundurun çünkü bu, veritabanları arasında tarihlerin gösterilmesi için tutarlı bir yol sağlar ve veri sıralama düzenini korur.
-
Boole değerleriyle karşılaştırma yaparken karışıklığı önlemek için, Access ve SQL Server'da şu karşılaştırmayı kullanabilirsiniz:
-
Yanlış değer için test etme WHERE Bitvalue = 0
-
Doğru değer için test etme WHERE Bitvalue <> 0
-
Null değerler
Null değer “hiç değer yok” anlamına gelen boş alan değildir. Null değer verilerin eksik olduğu veya bilinmediği anlamına gelen yer tutucudur. Null değerleri tanıyan veritabanı sistemleri “üç değerli mantık” uygular; bu da bir şeyin doğru, yanlış veya bilinmez olabileceği anlamına gelir. Null değerleri düzgün işlemezseniz, eşitlik karşılaştırmaları yaparken veya WHERE yan tümcelerini hesaplarken yanlış sonuçlar elde edebilirsiniz. Burada Access’in ve SQL Server’ın null değerleri işleme biçimi karşılaştırılır.
Tabloda null değerleri devre dışı bırakma
Access’te ve SQL Server’da varsayılan deneyim null değerlerin etkin olmasıdır. Tablo sütununda null değerleri devre dışı bırakmak için aşağıdakileri yapın:
-
Access'te alanın Required özelliğini Yes olarak ayarlayın.
-
SQL Server’da CREATE TABLE deyimindeki bir sütuna NOT NULL özniteliğini ekleyin.
WHERE yan tümcesinde null değerleri test etme
IS NULL ve IS NOT NULL karşılaştırma koşullarını kullanın:
-
Access’te IS NULL veya IS NOT NULL kullanın. Örneğin:
SELECT … WHERE column IS NULL.
-
SQL Server’da IS NULL veya IS NOT NULL kullanın. Örneğin:
SELECT … WHERE field IS NULL
İşlevlerle null değerleri dönüştürme
İfadelerinizi korumak ve alternatif değerler döndürmek için null işlevlerini kullanın:
-
Access’te 0 veya başka bir değer döndüren NZ (değer, [nullisedeğer]) işlevini kullanın. Örneğin:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
SQL Server’da 0 veya başka bir değer döndüren ISNULL(Değer, değiştirildiği_değer) işlevini kullanın. Örneğin:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Veritabanı seçeneklerini anlama
Bazı veritabanı sistemlerinde özel mekanizmalar bulunur:
-
Access’te Null ile ilgili hiçbir veritabanı seçeneği yoktur.
-
SQL Server’da = ve <> işleçlerini kullanarak NULL ile doğrudan eşitlik karşılaştırmaları yapmak için SET ANSI_NULLS OFF seçeneğini kullanabilirsiniz. Bu seçeneği kullanmaktan kaçınmanızı öneririz çünkü kullanımdan kaldırılmıştır ve ISO uyumlu null işlemesinden yararlanan diğer kullanıcıların kafasını karıştırabilir.
Dönüştürme ve yayınlama
Verilerle veya programlamayla çalışırken, sürekli bir veri türünü diğerine dönüştürme gereği ortaya çıkar. Dönüştürme işlemi basit veya karmaşık olabilir. Üzerinde düşünmeniz gereken yaygın sorunlar: örtülü veya açık dönüştürme, geçerli tarih ve saat bölgesel ayarları, sayıların yuvarlanması veya kesilmesi ve veri tür boyutları. Sonuçlarınızı kapsamlı olarak test etme ve onaylama yerine kullanabileceğiniz hiçbir yöntem yoktur.
Access'te her veri türü için bir tane olmak üzere toplam on bir tane olan ve hepsi C harfiyle başlayan Tür Dönüştürme İşlevlerini kullanırsınız. Örneğin, kayan noktalı sayıyı dizeye dönüştürmek için:
CStr(437.324) returns the string "437.324".
SQL Server'da asıl olarak CAST ve CONVERT TSQL işlevlerini kullanırsınız ama özel gereksinimler için başka Dönüştürme İşlevleri de vardır. Örneğin, kayan noktalı sayıyı dizeye dönüştürmek için:
CONVERT(TEXT, 437.324) returns the string "437.324"
DateAdd, DateDiff ve DatePart işlevleri
Yaygın kullanılan bu tarih işlevleri Access'te ve TSQL’de birbirine benzerdir (DateAdd, DateDiff ve DatePart) ama ilk bağımsız değişkenin kullanımı farklılık gösterir.
-
Access’te ilk bağımsız değişkene interval adı verilir ve tırnak işaretleri gerektiren bir dize ifadesidir.
-
SQL Server’da ilk bağımsız değişkene datepart adı verilir ve tırnak işaretleri gerektirmeyen anahtar sözcük değerlerini kullanır.
Bileşen
Access
SQL Server
Yıl
"yyyy"
year, yy, yyyy
Çeyrek
"q"
quarter, qq, q
Ay
"m"
month, mm, m
Yılın Günü
"y"
dayofyear, dy, y
Gün
"d"
day, dd, d
Hafta
"ww"
wk, ww
Haftanın Günü
"w"
weekday, dw
Saat
"h"
hour, hh
Dakika
"n"
minute, mi, n
Saniye
"s"
second, ss, s
Milisaniye
millisecond, ms
İşlevlerin karşılaştırması
Access sorgularında, sonuçları almak için bazen Access İşlevlerini kullanan hesaplanan sütunlar bulunabilir. Sorguları SQL Server’a geçirdiğinizde Access işlevini varsa eşdeğer bir TSQL işleviyle değiştirmelisiniz. Buna karşılık gelen bir TSQL işlevi yoksa, istediğiniz yapmak için çoğunlukla hesaplanan sütun oluşturabilirsiniz. TSQL’de çok çeşitli işlevler vardır ve nelerin kullanılabileceğini görmek işinize yarayacaktır. Daha fazla bilgi için bkz. SQL veritabanı işlevleri nelerdir?.
Aşağıdaki tabloda hangi Access işlevinin eşdeğer bir TSQL işlevi olduğu gösterilir.
Access kategorisi |
Access işlevi |
TSQL işlevi |
Dönüştürme |
||
Dönüştürme |
||
Dönüştürme |
||
Dönüştürme |
||
Dönüştürme |
||
Dönüştürme |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Tarih/Saat |
||
Etki Alanı Toplama |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Matematik |
||
Program Akışı |
||
Program Akışı |
||
İstatistik |
||
SQL Toplama |
||
SQL Toplama |
||
SQL Toplama |
||
SQL Toplama |
||
SQL Toplama |
||
Metin |
||
Metin |
||
Metin |
||
Metin |
||
Metin |
||
Metin |
||
Metin |
||
Metin |
||
Metin |