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を持っていて、私は多くのフォントを持っています。

insert文を実行する必要がありますが、その実行中にselectクエリが必要なので、KitGroupIDを見つけて挿入を確定してください。それは理にかなっていますか?

どのように私はこれを行うことができます、私は非常にSQLに新しいです..事前に感謝

0
私には申し訳ありませんが、それは意味がありません、あなたはKITGROUPにINSERTし、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 VALUES を使う方法と SELECT を使う方法の2通りがあります。元の例で、 SELECT 'value1'、 'value2'など 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
追加された
あなたの '...'またはKirkの 'More values'と同じです。 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
追加された
好奇心が強い:あなたのSELECTはどのようにしてINSERTを完成させますか?
追加された 著者 Andriy M,