SELECT sorgusu ile INSERT sorgusu?

Aşağıdaki INSERT bildirimi var:

INSERT INTO [StoreTestDB].[dbo].[KitItem]
           ([KitItemGUID]
           ,[KitGroupID]
           ,[Name]
           ,[Description]
           ,[PriceDelta]
           ,[WeightDelta]
           ,[IsDefault]
           ,[DisplayOrder]
           ,[ExtensionData]
           ,[TextOptionMaxLength]
           ,[TextOptionWidth]
           ,[TextOptionHeight]
           ,[InventoryVariantID]
           ,[InventoryVariantColor]
           ,[InventoryVariantSize]
           ,[CreatedOn])
VALUES
...
...
...

Bir yazı tipi olacak adı temel alarak KitGroupID'yi bulmak için başka bir sorgu çalıştırmam gerekiyor.

İşte böyle yapmak istiyorum:

SELECT TOP1 (KitGroupID)
FROM KitGroup
WHERE Name = "Font"
AND ProductID = 157

Ben yaklaşık 30 productIDs var ve ben çok sayıda font var.

Sonra insert deyimini çalıştırmam gerekiyor. Çalıştırırken eklentiyi kesinleştirmek için KitGroupID'yi bulmak için seçme sorgusuna ihtiyacım var. bu mantıklı mı?

Bunu nasıl yapabilirim, SQL için oldukça yeniyim .. Şimdiden teşekkürler

0
Üzgünüm, benim için mantıklı değil, aynı zamanda KITGROUP'dan KITGROUP ve SELECT'e INSERT'e mi gidiyorsunuz?
katma yazar sll, kaynak
KITGROUP'a değil KITITEM'e takılıyor
katma yazar socha23, kaynak

3 cevap

SELECT ifadesinden INSERT komutunu girebilir ve SELECT koduna çok sayıda hazır bilgi ekleyebilirsiniz:

INSERT [StoreTestDB].[dbo].[KitItem]
     -- all your column names
SELECT TOP 1
    'Value',
    23,
    [KitGroupId],
    'More values',
    -- ...
FROM [KitGroup] WHERE ...
5
katma
@ PD24 INSERT verilerinin iki yolu vardır - VALUES kullanabilir veya SELECT 'i kullanabilirsiniz. Orijinal örneğinizde VALUES ('value1', 'value2', vb.) değerini değiştirirseniz SELECT 'value1', 'value2' vb. görürsünüz. her ikisi de aynı ekler.
katma yazar Kirk Broadhurst, kaynak
Bir INSERT sorgusu, bir türetilmiş tablo.
katma yazar Tom Hunter, kaynak
Bu tür bir sorguya ne diyorsunuz, üzerinde okumak isterim?
katma yazar PD24, kaynak
lütfen benim örneğime bakın, hala select deyiminin eklere nasıl değer katacağını görmüyorum?
katma yazar PD24, kaynak

Şöyle yapabilirsin:

INSERT INTO [StoreTestDB].[dbo].[KitItem]
           ([KitItemGUID]
           ,[KitGroupID]
           ,[Name]
           ,[Description]
           ,[PriceDelta]
           ,[WeightDelta]
           ,[IsDefault]
           ,[DisplayOrder]
           ,[ExtensionData]
           ,[TextOptionMaxLength]
           ,[TextOptionWidth]
           ,[TextOptionHeight]
           ,[InventoryVariantID]
           ,[InventoryVariantColor]
           ,[InventoryVariantSize]
           ,[CreatedOn])
SELECT 
  NEWID(),
  (
    SELECT TOP1 (KitGroupID)
    FROM KitGroup
    WHERE Name = "Font"
    AND ProductID = 157
  )
  , anotherConstantValue ...
2
katma
'...' ya da Kirk'in 'Diğer değerler' ile aynı. Kirks cevabı benimkinden biraz daha zariftir, ProductId ve Name için her zaman bir KitGroup değeri olduğunu kanıtladı. Eğer bir kayıt olmasaydı, cevabım KitValue.KitGroupId'ye bir NULL eklentisi dener, oysa Kirk'in sorgusu bu örnekte hiç bir kayıt eklemez.
katma yazar StuartLC, kaynak
INSERT..VALUES, insertin onlt formudur - aynı zamanda INSERT ... SELECT (genellikle diğer tablolardan birden çok satır ekler) ve INSERT ... EXEC (yani, bir PROC'nin çıktısını ekleyin). Burada MSDN örneklerine bakın - msdn.microsoft.com/en-us/library/dd776381 .aspx
katma yazar StuartLC, kaynak
bir başkaSatılıkDeğeri ...? Ne anlama geliyor?
katma yazar PD24, kaynak
Bu tür bir sorguya ne diyorsunuz?
katma yazar PD24, kaynak

İşte benim sql'm:

INSERT INSERT INTO [StoreTestDB].[dbo].[KitItem]([KitGroupID],[Name],[PriceDelta],[WeightDelta],[IsDefault],[DisplayOrder],[InventoryVariantID]) VALUES (17,'Gaudi',0,0,1,1,0)       
SELECT TOP (1) KitGroupID, Name, ProductID FROM KitGroup WHERE (Name = 'Fonts') AND (ProductID = 157)
0
katma
Sadece meraklı: SELECT'iniz INSERT'inizi hangi yolla sonlandırır?
katma yazar Andriy M, kaynak