#sql-server
#sql-сервер
Вопрос:
CREATE PROC [dbo].[usp_InsertBulkShipmentData]
(
@RetVal VARCHAR(1000) OUTPUT,
@ship dbo.ShipmentData READONLY
)
AS
DECLARE @ShipmentID BIGINT
Declare @Output table (id int)
BEGIN
INSERT INTO
dbo.Shipment (ShipmentType,scaccode,ShipmentControl,countryLoading,PortLoading,ShipperName,ShipperAddressOne,ShipperCity,ShipperCountry,ShipperProvince,
ShipperZip,ShipperPhone,ShipperEmail,ConsigneeName,ConsigneeAddressOne,ConsigneeCity,ConsigneeCountry,ConsigneeState,ConsigneeZip,
ConsigneePhone,ConsigneeEmail,ResponseCode,astrayExportDate,bondType,bondDestPort,bondOnwardscac,bondCarrierIRS,
bondNumber,bondTransferIRS,bondForeignPort,bondDepartureDate,MexiPediNumber)
OUTPUT Inserted.id into @Output
SELECT sh.DDcode,s.SCACCode,s.ShipmentControl,s.CountryLoading,s.ProvinceLoading,s.ShipperName,s.ShipperAddress,s.ShipperCity,s.ShipperCountry,s.ShipperProvince,
s.ShipperZip,s.ShipperPhone,s.ShipperEmail,s.ConsigneeName,s.ConsigneeAddressOne,s.ConsigneeCity,s.ConsigneeCountry,s.ConsigneeState,s.ConsigneeZip,
s.ConsigneePhone,s.ConsigneeEmail,s.CustomControl,s.DateShipmentLeft,s.InbondEntryType,s.InbondDestination,s.OnwardCarrier,s.BondCarrier,
s.Inbond,s.bondTransfer,s.ForeignPortDestination,s.EstimatedDeparture,s.MexiPediNumber
FROM @ship s INNER JOIN ShipmentTypeDropDown sh on sh.DisplayName=s.ShipmentType
select id from @Output
SET @RetVal = 'true|Record Inserted Successfully|'
END
BEGIN
SELECT @ShipmentID=id;
INSERT INTO dbo.Ship_commodity([Description],Quantity,manifestUnitCode,
[weight],weightUnitCode,countryCode,customsShipmentValue,commodityCode,MarksNumbers)
SELECT sp.CommoditiesDescription,sp.Quantity,qu.DDCode,sp.
[Weight],wu.DDCode,sp.CountryOrigin,sp.Value,sp.HarmonizedCode,sp.MarksNumbers
FROM @ship sp INNER JOIN WeightUnitDropDown wu on wu.DisplayName=sp.WeightUnitCode
INNER JOIN QuantityUnitDropDown qu on qu.DisplayName=sp.QuantityUnit
END
идентификатор автоматически генерируется в таблице отгрузки. Я хочу вставить этот идентификатор в Ship_commodity, где ShipmentID=id .
Я вставляю записи из определяемой пользователем таблицы данных, для каждой записи идентификатор генерируется в таблице отгрузки. При вставке в
Таблица Ship_commodity я хочу вставить идентификатор отправки для каждой записи, где ShipmentID=id .
Как я должен этого добиться? пожалуйста, предложите.
Комментарии:
1. Присоединиться
@output
? ЧтоSELECT @ShipmentID=id;
нужно делать, это не имеет смысла2. Я пытался что-то сделать, я хотел взять идентификатор из таблицы отгрузки для каждой записи и вставить в Ship_commodity в качестве идентификатора доставки для этих записей, но я вставляю через userdefined таблицу. итак, как я могу этого добиться?
3. Что такое уникальный ключ
@ship
, вам также нужно будет отправить@output
его, чтобы присоединиться4. SCACCode, ShipmentControl — объединение этого уникально для каждой записи. как написать то, что вы говорите
Ответ №1:
Сначала вам insert
нужно получить первичный ключ @ship
, чтобы иметь возможность присоединять к нему выходную таблицу (обязательно добавьте дополнительные столбцы @output
):
OUTPUT inserted.id, inserted.scaccode, inserted.ShipmentControl into @Output
Затем вы можете присоединиться @output
к @ship
(я предполагаю Ship_commodity
, что у него есть столбец fkShipmentId
):
INSERT INTO dbo.Ship_commodity
(fkShipmentId, [Description], Quantity, manifestUnitCode, [weight], weightUnitCode,
countryCode, customsShipmentValue, commodityCode, MarksNumbers)
SELECT
i.id,
sp.CommoditiesDescription,
sp.Quantity,
qu.DDCode,
sp.[Weight],
wu.DDCode,
sp.CountryOrigin,
sp.Value,
sp.HarmonizedCode,
sp.MarksNumbers
FROM @ship sp
INNER JOIN WeightUnitDropDown wu on wu.DisplayName=sp.WeightUnitCode
INNER JOIN QuantityUnitDropDown qu on qu.DisplayName=sp.QuantityUnit
INNER JOIN @output i ON i.scaccode = sp.scaccode AND i.ShipmentControl = sp.ShipmentControl;