INSERT so'rovi SELECT so'rovi bilan?

Quyidagi INSERT iborasi mavjud:

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

KitGroupIDni shrift deb ataladigan nomga asoslanib topish uchun boshqa so'rovni bajarish kerak.

Mana, men buni qay darajada bajarishni xohlayman:

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

Taxminan 30 ta mahsuloti bor va ko'p shriftlarim bor.

Qo'shtirnoqni oxirigacha bajarish uchun KitGroupIDni topish uchun tanlangan so'rovga ehtiyoj bor bo'lsa, u holda ichki jadvalni ishlatish kerak. Bu mantiqiymi?

Qanday qilib buni qila olaman, SQL uchun juda yangi. Avvalgi rahmat

0
Kechirasiz, men uchun bu mantiqqa to'g'ri kelmaydi, siz KITGROUP va KITGROUPdan SELECT-ga bir vaqtning o'zida kirasizmi?
qo'shib qo'ydi muallif sll, manba
U KITITEMga emas, balki KITGROUPga kiradi
qo'shib qo'ydi muallif socha23, manba

3 javoblar

Agar SELECT iborasidan INSERT SELECT ichida juda ko'p sonli matnni kiritishingiz mumkin:

INSERT [StoreTestDB].[dbo].[KitItem]
     -- all your column names
SELECT TOP 1
    'Value',
    23,
    [KitGroupId],
    'More values',
    -- ...
FROM [KitGroup] WHERE ...
5
qo'shib qo'ydi
@ PD24 INSERT ma'lumotlaridan foydalanishning ikkita yo'li mavjud - VALUES dan foydalanishingiz mumkin yoki SELECT dan foydalanishingiz mumkin. Tanlash 'value1', 'value2' va hokazo uchun VALUES ('value1', 'value2' va hokazo) ni o'zgartirsangiz, asl nusxangizda buni ko'rasiz har ikkisi ham bir xil qo'shishadi.
qo'shib qo'ydi muallif Kirk Broadhurst, manba
Bu INSERT so'rovini ishlatib, olingan jadval.
qo'shib qo'ydi muallif Tom Hunter, manba
bu kabi so'rovlar nima deb nomlaysiz, men o'qishni istarmidim?
qo'shib qo'ydi muallif PD24, manba
iltimos, mening misolimga qarang, qanday qilib tanlangan so'zlar kiritilgan qiymatlarni qo'shib qo'yishini ko'rmayapmanmi?
qo'shib qo'ydi muallif PD24, manba

Siz shunday qilishingiz mumkin:

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
qo'shib qo'ydi
"..." yoki Kirkning "ko'proq qadriyatlari" bilan bir xil. Kirksning javoblari mennikiga qaraganda biroz oqlangan, PROVIDED, har doim ProductId va Name uchun KitGroup qiymati borligini ta'minladi. Agar biror yozuv bo'lmasa, javobim KitValue.KitGroupIdga NULL qo'shimchani kiritadi, ammo Kirkning so'rovi bu holatda hech qanday yozuv yozmaydi.
qo'shib qo'ydi muallif StuartLC, manba
INSERT..VALUES plaginning onlt shakli emas - siz INSERT ... SELECT (bir nechta satr qo'shishingiz mumkin, odatda boshqa jadvallardan) va INSERT ... EXEC (ya'ni PROC ning chiqishini joylashtiring). MSDN misollarini bu yerda ko'ring - qo'shib qo'ydi muallif StuartLC, manba
anotherConstantValue ...? Nima degani bu?
qo'shib qo'ydi muallif PD24, manba
Bunday so'rovni nima deb ataysiz?
qo'shib qo'ydi muallif PD24, manba

Mana mening 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
qo'shib qo'ydi
Faqat qiziq: SELECT sizning INSERT-ni qanday qilib yakunlaydi?
qo'shib qo'ydi muallif Andriy M, manba