2011-08-07 14 views
17

SQL Server'dan mySQL'den geliyorum. Aşağıdaki sözdizimi SQL Server'da çalışmıyor mu?SQL Server'da INSERT INTO SET sözdizimi

INSERT INTO table SET fil1="234", fil2="324" 

SQL Server'da karşılaştırılabilir bir ifade var mı?

+5

Ne kafa karıştırıcı bir sözdizimi! Eğer [dökümantasyon] 'u aramak için web aramayı nasıl kullanamayacağımı bilmiyor olsaydım, birisinin GÜNCELLEN kadar karışık olacağını düşünürdüm. ve INSERT! –

+0

Her iki ansvers yararlıdır! –

+13

Mevcut SQL sözdizimini gerçekten yok sayıyorum. Küçük tablolar ile çalışmak iyi görünüyor, ancak bir tablo çok fazla sütun oluşturmaya başladığında, Col = değer sözdizimini kullanmak çok daha güzel. – Rhyous

cevap

8

kayıtları eklemek için SET yolu standard SQL değildir. Eğer güncellemeler ve ekler için benzer SQL'ın kullanmak gerekiyorsa, örneğin, yerine MS SQL-Server Saklı-Prosedürler kullanmalıdır:

CREATE Procedure tableInsertUpdate 
(
    @ID int, 
    @fil1 int, 
    @fil2 int, 
    @IDOut int OUTPUT 
) 
AS 
    IF EXISTS(SELECT ID from table WHERE [email protected]) 
    BEGIN 
     UPDATE table SET 
      fil1 = @fil1 
      fil2 = @fil2 
     WHERE [email protected] 
     SET @IDOut=null 
     END 
     ELSE 
     BEGIN 
     INSERT INTO table 
     (fil1, fil2) 
     VALUES 
     (@fil1, @fil2) 
     SET @IDOut=scope_identity() 
     END 
+1

Bu iş parçacığı güvenli değildir. Varlığı denetlenebilir hale getirerek veya yinelenen bir anahtar hatası üzerinde çalışarak düzeltebilirsiniz. Son seçenek tercih edilir, çünkü seri hale getirilebilir hale getirilmesi er ya da geç çıkmazlara neden olur. –

+0

Ayrıca, Books Online'da MERGE ifadesine bakmak da isteyebilirsiniz. – HLGEM

16
INSERT INTO table (fil1, fil2) VALUES ('234', '324');
+3

Ekleme sadece bu sözdizimi var mı? (çok kötü) –

+4

Mutlaka kötü bir şey değil. SQL standardı olmadığından. –

+0

@KakYlia, diğerine 6 ila bir, yarım düzine var. Her iki alan için INSERTing verileri yoksa, her ikisini de alanlarınızı açıkça belirtmeniz gerekir. –

8

Daha sadece eşsiz INSERT ve Güncelleme bildiriye sahip büyük bir güçlük. 30 sütun içeren tablolarla çalışmak zorundaysanız, kolayca anlayabileceksiniz.

MySQL varyantı, bir kez kod yazmamı sağlar - ve her ikisine de ihtiyaç duyulan şeyleri yapar - aslında yalnızca komut dizisinin adını sorgu dizesinde değiştirmeniz gerekir.

MSSQL varyantı, neredeyse aynı koda sahip olan hataları (alanları doldurmak için alan adları ve veriler bakımından) 2 kez provokasyona neden olur.

Ve eğer daha sonra sadece tek bir alan adını değiştirirsem 2 kod pozisyonunu değiştirmek anlamına gelir - ya MSSQL'de yaptığım gibi. Saklı yordamın değiştirilmesi ve kodumda onu çağıran ekleme deyimi. Veya aksi takdirde gerekli olan 2 farklı deyim ve güncelleme ifadesinin değiştirilmesi gerekir. Bu bariz hata kaynağı tamamen MSSQL'de suçlanıyor (en azından benim bakış açımdan).