SQL Söz Dizimi
Windows Installer için SQL sorgu dizeleri aşağıdaki biçimlerle sınırlıdır.
Eylem | Sorgu |
---|---|
Kayıt grubu seçme | SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}] |
Tablodaki kayıtları silme | DELETE FROM {table} [WHERE {operation-list}] |
Tablodaki mevcut kayıtları değiştirme | UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}]UPDATE sorguları yalnızca ayrıcalık dışı anahtar sütunlarında çalışır. |
Tabloya kayıt ekleme | INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]İKIli veriler, INSERT INTO veya UPDATE SQL sorguları kullanılarak doğrudan tabloya eklenemez. Daha fazla bilgi için bkz. sql kullanarak tabloya ikili veri ekleme. |
Tablo ekleme | CREATE TABLE {table} ( {column} {column type}) [HOLD]Tablo eklenirken her sütun için sütun türleri belirtilmelidir. Yeni bir tablo oluşturmak için en az bir birincil anahtar sütunu belirtilmelidir. Yukarıdaki {column type} için olası değiştirmeler şunlardır: CHAR [( {size} )] | KARAKTER [( {size} )] | LONGCHAR | KISA | INT | TAMSAYı | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [, column...][, ...] BİRİnCİl ANAHTAR sütunu [, sütun][, ...]. |
Tabloyu kaldırma | DROP TABLE {table} |
Sütun ekleme | ALTER TABLE {table} ADD {column} {column type}Sütun eklenirken sütun türü belirtilmelidir. Yukarıdaki {column type} için olası değiştirmeler şunlardır: CHAR [( {size} )] | KARAKTER [( {size} )] | LONGCHAR | KISA | INT | TAMSAYı | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [HOLD]. |
Beklemeye alma ve geçici tabloları serbest tutma | ALTER TABLE {table name} HOLDALTER TABLE {table name} FREE Kullanıcı, geçici bir tablonun veya geçici sütunun yaşam süresini denetlemek için HOLD ve FREE komutlarını kullanabilir. Bir tablodaki ayrı tutma sayısı, söz konusu tablodaki her SQL HOLD işlemi için artırılır ve tablodaki her SQL ÜCRETSİz işlemi için azalmış durumdadır. Bir tabloda son ayrı tutma sayısı serbest bırakıldığında, tüm geçici sütunlara erişilemez hale gelir. Tüm sütunlar geçiciyse tabloya erişilemez duruma gelir. |
Daha fazla bilgi için bkz. sql ve betik kullanan veritabanı sorguları örnekleri.
SQL Dil Bilgisi
İsteğe bağlı parametreler köşeli ayraç [ ] içine alınmış olarak gösterilir. Birkaç seçenek listelendiğinde, isteğe bağlı parametreler dikey çubukla ayrılır.
{constant} bir dize veya tamsayıdır. Bir dizenin tek tırnak işareti 'example' içine alınması gerekir. {constant-list}, bir veya daha fazla sabitin virgülle ayrılmış listesidir.
LOCALIZABLE seçeneği, sütunun yerelleştirilmesi gerektiğini belirten bir sütun özniteliği ayarlar.
{column}, tablonun alanındaki bir değere sütunlu başvurudur.
{marker}, sorguyla gönderilen bir kayıt tarafından sağlanan değere yapılan parametre başvurusudur. SQL deyiminde bir soru işaretiyle gösterilir? Parametrelerin kullanımı hakkında bilgi için bkz. MsiViewExecute işlevi veya Execute yöntemi.
Windows Installer SQL söz dizimi, bir dize değişmez değerinde tek tırnak (ASCII değeri 39) kaçışını desteklemez. Ancak, kaydı getirebilir veya oluşturabilir, stringDataveya IntegerDataözelliğiyle alanı ayarlayabilir ve ardından Modify yöntemini çağırabilirsiniz. Alternatif olarak, bir kayıt oluşturabilir ve Execute yönteminde açıklanan parametre işaretleyicilerini (?) kullanabilirsiniz. Bunu MsiViewExecute, MsiRecordSetIntegerve MsiRecordSetStringveritabanı işlevlerini kullanarak da yapabilirsiniz.
WHERE {operation-list} yan tümcesi isteğe bağlıdır ve seçimi filtrelemek için kullanılacak bir işlem grubudur. İşlemler aşağıdaki türlerde olmalıdır:
- {column} = {column}
- {column} = | <> | > | < | >= | <= {constant}
- {column} = | <> | > | < | >= | <= {marker}
- {column} null
- {column} null değil
Dize değerleri için yalnızca = veya <> işlemleri mümkündür. Nesne değeri karşılaştırmaları IS NULL ve IS NOT NULL ile sınırlıdır.
Tek tek işlemler VE veya OR işleçlerine göre gruplandırılabilir. Sıralama parantezler ( ) ile yapılabilir.
ORDER BY yan tümcesi isteğe bağlıdır ve sıralama sırasında ilk gecikmeye neden olur. Dizelere göre sıralama aynı dizeleri birlikte gruplandıracaktır, ancak dizeleri alfabetik olarak sıralamaz.
DISTINCT yan tümcesi isteğe bağlıdır ve döndürülen sonuç kümesinde aynı kayıtları yinelemez.
{table-list}, birleşimde {table} olarak adlandırılan bir veya daha fazla tablo adının virgülle ayrılmış listesidir.
{column-list}, seçili {column} olarak adlandırılan bir veya daha fazla tablo sütununun virgülle ayrılmış listesidir. Belirsiz sütunlar {tablename.column} olarak nitelenebilir. Yıldız işareti, başvuruda bulunılan tablolardaki tüm sütunları temsil etmek için SELECT sorgusunda sütun listesi olarak kullanılabilir. Alanlara sütun konumuna göre başvururken, sütunları yıldız işareti yerine ada göre seçin. Yıldız işareti, INSERT INTO sorgusunda sütun listesi olarak kullanılamaz.
SQL anahtar sözcükleriyle çakıştıran tablo adlarından ve sütun adlarından kaçmak için, adı '' iki vurgu işareti (ASCII değeri 96) arasına alın. Bir sütun adının kaçış olması gerekiyorsa ve {tablename.column} olarak nitelenmişse, tablo ve sütun tek tek {'tablename'.'column'} olarak kaçış karakterine sahip olmalıdır. Ayrılmış sözcüklerle çakışmaları önlemek ve önemli bir performans elde etmek için tüm tablo adlarının ve sütun adlarının bu şekilde kaçılması önerilir.
Tablo adları 31 karakterle sınırlıdır. Daha fazla bilgi için bkz. Tablo Adları. Tablo ve sütun adları büyük/küçük harfe duyarlıdır. SQL anahtar sözcükleri büyük/küçük harfe duyarlı değildir.
SQL sorgusunun WHERE yan tümcesindeki ifade sayısı üst sınırı 32 ile sınırlıdır.
Yalnızca iç birleşimler desteklenir ve farklı tablolardaki sütunların karşılaştırması ile belirtilir. Döngüsel birleşimler desteklenmez. Döngüsel birleştirme, üç veya daha fazla tabloyu bir bağlantı hattına bağlayan bir SQL sorgusudur. Örneğin, döngüsel birleşim aşağıda verilmiştir:
WHERE Table1.Field1=Table2.Field1 AND Table2.Field2=Table3.Field1 AND Table3.Field2=Table1.Field2.
Bir tablonun birincil anahtarlarının parçası olan sütunlar önce öncelik sırasına göre, ardından da ayrıcalık dışı anahtar sütunlarıyla tanımlanmalıdır. Kalıcı sütunlar geçici sütundan önce tanımlanmalıdır. Metin sütununun sıralama sırası tanımlanmamıştır; ancak, özdeş metin değerleri her zaman birlikte gruplandırılır.
Sütun eklerken veya oluştururken sütun türünü belirtmeniz gerektiğini unutmayın.
Tablolar 'object' türünde birden fazla sütun içermeyebilir.
SQL sorgusundaki bir dize sütunu için açıkça belirtilebilen boyut üst sınırı 255'tir. Sonsuz uzunlukta bir dize sütunu, boyutu 0 olarak gösterilir. Daha fazla bilgi için bkz. Sütun Tanımı Biçimi.
Herhangi bir SQL deyimini yürütmek için bir görünüm oluşturulmalıdır. Ancak CREATE TABLE veya INSERT INTO gibi bir sonuç kümesi oluşturmayan bir görünüm, MsiViewModify veya Modify yöntemiyle kullanılamaz.
Bir veritabanından ikili veri içeren bir kaydı getiremeyeceğinizi ve ardından bu kaydı kullanarak verileri tamamen farklı bir veritabanına ekleyemeyeceğinizi unutmayın. İkili verileri bir veritabanından diğerine taşımak için, verileri bir dosyaya aktarmanız ve ardından bir sorgu ve MsiRecordSetStream işlevi aracılığıyla yeni veritabanına aktarmanız gerekir. Bu, her veritabanının kendi ikili veri kopyasına sahip olmasını sağlar.