SELECT сұрауымен INSERT сұрау?

Келесі INSERT мәлімдемесі бар:

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

Шрифт болатын аты бойынша KitGroupID анықтау үшін басқа сұрауды іске қосу керек.

Міне, мен оны қалай істеуді қалаймын:

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

Менде шамамен 30 productID иеленеді және менің көптеген қаріптерім бар.

Мен кірістіруді аяқтау үшін KitGroupID-ді табу үшін, оны іске қосу процедурасын орындау қажет болғанда, кірістіру туралы мәлімдемені іске қосу керек. Бұл мағынасы бар ма?

Мұны қалай жасай аламын, мен SQL-ге мүлдем жаңа. Алдын ала рахмет

0
Кешіріңіз, бұл мен үшін мағынасы жоқ, сіз KITGROUP ішіне кіріп, сонымен бірге KITGROUP-тен SELECT-ге кіресіз бе?
қосылды автор sll, көзі
Ол KITGROUP емес, KITITEM-ға кіреді
қосылды автор socha23, көзі

3 жауаптар

Сіз SELECT операторынан INSERT сөзін енгізе аласыз және SELECT ішінде көптеген литералдарды қосасыз:

INSERT [StoreTestDB].[dbo].[KitItem]
     -- all your column names
SELECT TOP 1
    'Value',
    23,
    [KitGroupId],
    'More values',
    -- ...
FROM [KitGroup] WHERE ...
5
қосылды
@ PD24 INSERT деректерінің екі жолы бар - сіз VALUES пайдалана аласыз немесе SELECT пайдалана аласыз. SELECT 'value1', 'value2', etc үшін VALUES ('value1', 'value2', және т.б.) өзгерткен жағдайда бастапқы мысалда екеуі бірдей кірістіреді.
қосылды автор Kirk Broadhurst, көзі
Бұл INSERT сұранымын пайдаланып, алынған кесте.
қосылды автор Tom Hunter, көзі
Сіз бұл сұранымды қандай аталады, мен оны оқып бергім келеді?
қосылды автор PD24, көзі
менің мысалға қарасаңыз, таңдау таңбасының кірістіруге мәндерді қалай қосатынын әлі көрмеймін бе?
қосылды автор PD24, көзі

Сіз мыналарды істей аласыз:

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
қосылды
«...» немесе Киркдің «көп құндылықтары» сияқты. Kirks-дің жауаптары менікінен әлдеқайда талғампаз болып табылады, ProductId және Name үшін әрдайым KitGroup мәні бар екенін көрсетті. Егер жазба болмаса, менің жауаптарым KitValue.KitGroupId ішіне NULL кірістіруге тырысады, ал Kirk сұрауы бұл жағдайда мүлдем жазба салмайды.
қосылды автор StuartLC, көзі
INSERT..VALUES кірістірудің onlt пішіні емес - INSERT ... SELECT (бірнеше кестені, әдетте басқа кестелерден) және INSERT ... EXEC (яғни PROC шығуын кірістіру) болады. Мұнда MSDN мысалдарын қараңыз - msdn.microsoft.com/en-us/library/dd776381 .aspx
қосылды автор StuartLC, көзі
anotherConstantValue ...? Бұл нені білдіреді?
қосылды автор PD24, көзі
бұл сұраққа қандай жауап бересіз?
қосылды автор PD24, көзі

Міне, менің sql:

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
қосылды
Тек любопыт: Сіздің ТАҢДАУ сіздің INSERT-ды қалай аяқтайды?
қосылды автор Andriy M, көзі