#sql #sql-server #sql-server-2008 #tsql
#sql #sql-сервер #sql-server-2008 #tsql
Вопрос:
У меня есть следующий оператор 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 идентификаторов продукта, и у меня много шрифтов.
Мне нужно запустить инструкцию insert, затем во время ее выполнения мне нужен запрос select, чтобы узнать KitGroupID, чтобы затем завершить вставку. Есть ли в этом смысл?
Как я могу это сделать, я новичок в SQL .. Заранее спасибо
Комментарии:
1. Извините, но для меня это не имеет смысла, вы собираетесь ВСТАВИТЬ в KITGROUP и ВЫБРАТЬ из KITGROUP одновременно?
2. Он вставляет в KITITEM, а не в KITGROUP
Ответ №1:
Вы можете INSERT
SELECT
использовать оператор и включить в него множество литералов SELECT
:
INSERT [StoreTestDB].[dbo].[KitItem]
-- all your column names
SELECT TOP 1
'Value',
23,
[KitGroupId],
'More values',
-- ...
FROM [KitGroup] WHERE ...
Комментарии:
1. что вы называете такого рода запросом, я хотел бы прочитать об этом?
2. Это запрос ВСТАВКИ с использованием производной таблицы.
3. пожалуйста, посмотрите на мой пример, я все еще не понимаю, как оператор select добавит значения к insert?
4. @PD24 Есть два способа
INSERT
передачи данных — вы можете использоватьVALUES
, или вы можете использоватьSELECT
. В вашем исходном примере, если вы изменитеVALUES ( 'value1', 'value2', etc )
значение наSELECT 'value1', 'value2', etc
, вы увидите, что оба вставляют одно и то же.
Ответ №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 ...
Комментарии:
1. anotherConstantValue … ? что это значит?
2. То же, что и ваше «…» или «Дополнительные значения» Кирка. Ответ Киркса немного более элегантный, чем мой, ПРИ условии, что для идентификатора продукта и имени всегда есть значение KitGroup. Если записи нет, то в моем ответе будет предпринята попытка вставки NULL в KitValue. KitGroupId тогда как запрос Кирка вообще не вставит запись в этом экземпляре.
3. как вы называете такого рода запросы?
4. ВСТАВКА ..ЗНАЧЕНИЯ не является единственной формой вставки — вы также можете ВСТАВИТЬ… ВЫБЕРИТЕ (вставьте несколько строк, обычно из других таблиц) и ВСТАВЬТЕ… ВЫПОЛНИТЬ (т. е. Вставить выходные данные процедуры). Смотрите Примеры MSDN здесь — msdn.microsoft.com/en-us/library/dd776381.aspx
Ответ №3:
Вот мой 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)
Комментарии:
1. Просто любопытно: каким образом ваш ВЫБОР завершает вашу ВСТАВКУ?