Veri ekleme
Transact-SQL, tabloya satır eklemek için birden çok yol sağlar.
INSERT deyimi
INSERT deyimi, tabloya bir veya daha fazla satır eklemek için kullanılır. deyiminin birkaç biçimi vardır.
Basit bir INSERT deyiminin temel söz dizimi aşağıda gösterilmiştir:
INSERT [INTO] <Table> [(column_list)]
VALUES ([ColumnName or an expression or DEFAULT or NULL],…n)
INSERT deyiminin INSERT VALUES adlı bu biçimiyle, değerlerin yerleştirileceği sütunları ve tabloya eklenen her satır için verilerin hangi sırada sunulacağını belirtebilirsiniz. column_list isteğe bağlıdır ancak önerilir. column_list olmadan INSERT deyimi, tablodaki her sütun için sütunların tanımlandığı sırada bir değer bekler. Bu sütunlar için değerleri virgülle ayrılmış liste olarak da sağlayabilirsiniz.
Değerleri listelerken DEFAULT anahtar sözcüğü, tablo oluşturulduğunda belirtilen önceden tanımlanmış bir değerin kullanılacağı anlamına gelir. Varsayılanı belirlemenin üç yolu vardır:
- Bir sütun otomatik olarak oluşturulan bir değere sahip olacak şekilde tanımlanmışsa, bu değer kullanılır. Otomatik oluşturulan değerler bu modülün ilerleyen bölümlerinde ele alınacaktır.
- Tablo oluşturulduğunda, bir sütun için varsayılan değer sağlanabilir ve DEFAULT belirtilirse bu değer kullanılır.
- Bir sütun NULL değerlere izin verecek şekilde tanımlanmışsa ve sütun otomatik olarak oluşturulan bir sütun değilse ve varsayılan tanımlı değilse, NULL VARSAYıLAN olarak eklenir.
Tablo oluşturma ayrıntıları bu modülün kapsamı dışındadır. Ancak, bir tabloda hangi sütunların olduğunu görmek genellikle yararlıdır. En kolay yol, herhangi bir satır döndürmeden tabloda bir SELECT deyimi yürütmektir. Hiçbir zaman DOĞRU olamaz bir WHERE koşulu kullanarak, hiçbir satır döndürülemez.
SELECT * FROM Sales.Promotion
WHERE 1 = 0;
Bu deyim size tüm sütunları ve adlarını gösterir, ancak veri türlerini veya NUL'lere izin verilip verilmeyeceği veya varsayılan değerler belirtilmiş olması gibi özellikleri göstermez. Sorgu çıktısının bir örneği şöyle görünebilir:
PromotionName
StartDate
Productmodelıd
İndirim
Notlar
Bu tabloya veri eklemek için burada gösterildiği gibi INSERT deyimini kullanabilirsiniz.
INSERT INTO Sales.Promotion (PromotionName,StartDate,ProductModelID,Discount,Notes)
VALUES
('Clearance Sale', '01/01/2021', 23, 0.1, '10% discount');
Yukarıdaki bu örnekte, her sütun için doğru sırada bir değer sağladığımız için sütun listesi atlanabilir:
INSERT INTO Sales.Promotion
VALUES
('Clearance Sale', '01/01/2021', 23, 0.1, '10% discount');
Tablonun geçerli tarihin varsayılan değerinin StartDate sütununa uygulanacağı ve Notes sütununun NULL değerlere izin verdiği şekilde tanımlandığını varsayalım. Bu değerleri açıkça kullanmak istediğinizi belirtebilirsiniz, örneğin:
INSERT INTO Sales.Promotion
VALUES
('Pull your socks up', DEFAULT, 24, 0.25, NULL);
Alternatif olarak, INSERT deyimindeki değerleri atlayabilirsiniz; bu durumda varsayılan değer tanımlanırsa kullanılır ve varsayılan değer yoksa ancak sütun DLL'lere izin veriyorsa NULL eklenir. Tüm sütunlar için değer belirtmiyorsanız, hangi sütun değerlerini sağladığınızı gösteren bir sütun listeniz olmalıdır.
INSERT INTO Sales.Promotion (PromotionName, ProductModelID, Discount)
VALUES
('Caps Locked', 2, 0.2);
Bir kerede tek satır eklemeye ek olarak, INSERT VALUES deyimi birden çok virgülle ayrılmış değer kümesi sağlayarak birden çok satır eklemek için kullanılabilir. Değer kümeleri de virgülle ayrılır, örneğin:
(col1_val,col2_val,col3_val),
(col1_val,col2_val,col3_val)
Bu değer listesi, tablo değeri oluşturucu olarak bilinir. Tablomuza tablo değeri oluşturucuyla iki satır daha ekleme örneği aşağıda verilmişti:
INSERT INTO Sales.Promotion
VALUES
('The gloves are off!', DEFAULT, 3, 0.25, NULL),
('The gloves are off!', DEFAULT, 4, 0.25, NULL);
EKLE... SEÇİN
T-SQL, INSERT deyiminde değişmez değer kümesi belirtmeye ek olarak, INSERT için değer sağlamak üzere diğer işlemlerin sonuçlarının kullanılmasını da destekler. INSERT deyiminin değerlerini sağlamak için SELECT deyiminin sonuçlarını veya saklı yordamın çıkışını kullanabilirsiniz.
INSERT'i iç içe BIR SELECT ile kullanmak için, VALUES yan tümcesini değiştirmek için bir SELECT deyimi oluşturun. INSERT SELECT adlı bu formla, select sorgusu tarafından döndürülen satır kümesini hedef tabloya ekleyebilirsiniz. INSERT SELECT kullanımı, INSERT VALUES ile aynı noktaları sunar:
- İsteğe bağlı olarak tablo adını izleyen bir sütun listesi belirtebilirsiniz.
- Her sütun için sütun değerleri veya DEFAULT veya NULL sağlamanız gerekir.
Aşağıdaki söz diziminde INSERT SELECT kullanımı gösterilmektedir:
INSERT [INTO] <table or view> [(column_list)]
SELECT <column_list> FROM <table_list>...;
Dekont
Saklı yordamlardan (hatta dinamik toplu işlemlerden) elde edilen sonuç kümeleri, INSERT deyimine giriş olarak da kullanılabilir. INSERT EXEC olarak adlandırılan bu INSERT biçimi, kavramsal olarak INSERT SELECT'e benzer ve aynı konuları sunar. Ancak saklı yordamlar birden çok sonuç kümesi döndürebileceğinden ek bakım gerekir.
Aşağıdaki örnek, adında "çerçeve" bulunan her model için Production.ProductModel tablosundan model kimliğini ve model adını alarak Çerçeveli Al adlı yeni bir yükseltme için birden çok satır ekler.
INSERT INTO Sales.Promotion (PromotionName, ProductModelID, Discount, Notes)
SELECT DISTINCT 'Get Framed', m.ProductModelID, 0.1, '10% off ' + m.Name
FROM Production.ProductModel AS m
WHERE m.Name LIKE '%frame%';
Bir alt sorgudan farklı olarak, INSERT ile kullanılan iç içe SELECT parantez içine alınmaz.
SEÇİN... INTO
INSERT SELECT'e benzer bir satır ekleme seçeneği de SELECT INTO deyimidir. INSERT SELECT ile SELECT INTO arasındaki en büyük fark, SELECT INTO'nun var olan bir tabloya satır eklemek için kullanılamamasıdır, çünkü her zaman SELECT sonucunu temel alan yeni bir tablo oluşturur. Yeni tablodaki her sütun, SELECT listesindeki ilgili sütunla (veya ifadeyle) aynı ada, veri türüne ve null atanabilirliğe sahip olur.
SELECT INTO kullanmak için, FROM yan tümcesinden hemen önce sorgunun SELECT yan tümcesine INTO <new_table_name> ekleyin. Aşağıda Sales.SalesOrderHeader tablosundaki verileri Sales.Invoice adlı yeni bir tabloya ayıklayan bir örnek verilmiştir.
SELECT SalesOrderID, CustomerID, OrderDate, PurchaseOrderNumber, TotalDue
INTO Sales.Invoice
FROM Sales.SalesOrderHeader;
SELECT INTO, INTO sonrasında belirtilen ada sahip bir tablo zaten varsa başarısız olur. Tablo oluşturulduktan sonra, başka bir tablo gibi ele alınabilir. Bu öğeden seçim yapabilir, diğer tablolara ekleyebilir veya içine daha fazla satır ekleyebilirsiniz.