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,