2011-10-28 63 views
0

我有以下INSERT语句:使用SELECT查询的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 productIDs和我有很多字体。

我需要运行插入语句,然后在其运行时,我需要选择查询来找出KitGroupID然后完成插入。那有意义吗?

我怎样才能做到这一点,我很新的SQL ..在此先感谢

+0

对不起,对我来说,这是没有意义的,你要同时插入KITGROUP和SELECT从KITGROUP? – sll

+1

他插入到KITITEM中,而不是KITGROUP – socha23

回答

5

可以INSERTSELECT语句,包括很多在文字的那个SELECT

INSERT [StoreTestDB].[dbo].[KitItem] 
    -- all your column names 
SELECT TOP 1 
    'Value', 
    23, 
    [KitGroupId], 
    'More values', 
    -- ... 
FROM [KitGroup] WHERE ... 
+0

你称这种查询为什么,我想阅读它? – PD24

+1

这是使用派生表的[INSERT](http://msdn.microsoft.com/zh-cn/library/ms174335(v = SQL.100).aspx)查询。 –

+0

请看我的例子,我仍然没有看到如何选择语句将值添加到插入? – PD24

2

你可以像这样:

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 ... 
+0

anotherConstantValue ...?这是什么意思? – PD24

+2

与您的'...'或Kirk的'更多价值'相同。 Kirks的答案比我的更优雅,提供了ProductId和Name总是有一个KitGroup值。如果没有记录,那么我的答案会尝试向KitValue.KitGroupId插入NULL,而Kirk的查询在此实例中不会插入任何记录。 – StuartLC

+0

你把这种查询称为什么? – PD24

0

这里是我的SQL:

INSERT INSERT INTO [StoreTestDB].[dbo].[KitItem]([KitGroupID],[Name],[PriceDelta],[WeightDelta],[IsDefault],[DisplayOrder],[InventoryVariantID]) VALUES (17,'<ml><locale name="en-GB">Gaudi</locale></ml>',0,0,1,1,0)  
SELECT TOP (1) KitGroupID, Name, ProductID FROM KitGroup WHERE (Name = 'Fonts') AND (ProductID = 157) 
+0

只是好奇:您的SELECT以什么方式完成您的INSERT? –