2012-06-12 13 views
163

: Yeni satırın kimlik değerine @var INT nasıl ayarlarımKimlik değerini almak için INSERT ifadesinin OUTPUT yan tümcesini nasıl kullanırım? Ben gibi bir ekleme deyimi varsa

INSERT INTO MyTable 
( 
    Name, 
    Address, 
    PhoneNo 
) 
VALUES 
(
    'Yatrix', 
    '1234 Address Stuff', 
    '1112223333' 
) 

ÇIKIŞ maddesini kullanarak (Id denir)? Örneğin, INSERTED.Name değerini tablo değişkenlerine koyma örneklerini gördüm, ancak bunu tablo dışı bir değişkene alamıyorum.

OUPUT INSERTED.Id AS @var, SET @var = INSERTED.Id'u denedim, ancak çalışmadım.

+2

@@ SCOPE_IDENTITY adresini biliyorum, özellikle OUPUT ile nasıl yapılacağını bilmek istiyorum. Teşekkürler. – Yatrix

+6

Bir tablo değişkenine eklemeniz ve daha sonra bunu seçmeniz gerekir. "OUTPUT" deyiminden bir skaler değişkene doğrudan atanacak sözdizimi yoktur. –

+3

[OUTPUT yan tümcesi] (http://msdn.microsoft.com/en-us/library/ms177564.aspx) bir tablo veya tablo değişkenine çıktı olmalıdır. – mellamokb

cevap

320

için Ya böyle ssms konsola yeni eklenen kimlik olmak çıkışı vardır:

INSERT INTO MyTable(Name, Address, PhoneNo) 
OUTPUT INSERTED.ID 
VALUES ('Yatrix', '1234 Address Stuff', '1112223333') 

için, örneğin Sigma'dan de kullanabilir Geri arama uygulamanıza geri dönmeniz gerektiğinde C#, sadece .ExecuteScalar() (.ExecuteNonQuery() yerine) ile SQL sorgusunu gerçekleştirin ve sonuçta ortaya çıkan ID numarasını okuyun.

DECLARE @OutputTbl TABLE (ID INT) 

INSERT INTO MyTable(Name, Address, PhoneNo) 
OUTPUT INSERTED.ID INTO @OutputTbl(ID) 
VALUES ('Yatrix', '1234 Address Stuff', '1112223333') 

Bu şekilde, içine birden fazla değer koyabilirsiniz: Eğer yeni T-SQL içine ID sokulan (daha sonra daha ileri işlemler için örneğin) yakalamak için gerekirse

Veya, bir tablo değişken oluşturmak gerekir @OutputTbl ve bunlar üzerinde daha fazla işlem gerçekleştirin. Ayrıca "normal" geçici bir tablo (#temp) veya "çıkış hedefi" olarak "gerçek" kalıcı bir tablo bile kullanabilirsiniz.

+2

Buradaki kod için cevap özlüydi. ExecuteScalar() FTW –

+5

Sonucu, 'gerçek kalıcı bir tabloya' ekleyebilirsiniz - bu son derece fantastiktir, çünkü 'İKİ' tablolarındaki bilgileri 'İLERİ' olarak aynı anda yapabilirsiniz. – gotqn

+2

Üst taraftan çekmek için @@ IDENTITY özelliğini kullanmayın. Tetikleyicileriyle çalışmanın en zor yolu ve bir tabloya yapılan değişikliklerin tarihini kaydettikleri ve aynı zamanda yeni bir tabloya eklendikleri için, @@ IDENTITY, geçmiş tablosundaki değerleri geri döndürmeye başladı. neşe oradan geliyor! Lütfen marc_s 'çözümünü kullanın. Şu an için @OutputTbl yöntemiyle gittim, ancak diğer seçeneklerle ilgileniyorum. –

İlgili konular