Я развиваю эту хранимую процедуру SQL Server 2012.Как обновить N строк, когда N находится в из (выберите N от @myVar)
Хранимая процедура обновления Quantity
строки в EXTERNAL_CODES
таблице для каждой строки в параметре @newBatches
. Это похоже на цикл, мне нужно будет создать новую строку в таблице BATCHES
для каждой строки в параметре @newBatches
.
И затем, я должен обновить Quantity
строк в EXTERNAL_CODES
стол с каждым batchId
создан.
CREATE PROCEDURE [dbo].[CreateBatchAndKeepExternalCodes]
@newBatches as dbo.CreateBatchList READONLY,
@productId int
AS
set nocount on;
declare @lowestCodeLevel tinyint;
-- ======== VALIDATION ==========
if ((select count(name) from @newBatches) = 0)
return -112;
-- ====== CODE ========
-- Get lowest aggregation level.
set @lowestCodeLevel =
(select min(c.application_code)
from CHINA_CODES_HEADER c, PRODUCTS p
where p.Id = @productId and c.DRUG_TEN_SEATS = p.PRODUCT_CODE);
begin transaction;
insert into BATCHES (PRODUCT_ID, NAME, CREATED)
select @productId, Name, CAST(SYSDATETIMEOFFSET() as nvarchar(50))
from @newBatches;
update top(t.Quantity) EXTERNAL_CODES
set BATCH_ID = (select ID from BATCHES where NAME = t.Name)
, USED = 1
from (select Name, Quantity from @newBatches) t
where PRODUCT_ID = @productId and CODE_LEVEL = @lowestCodeLevel;
commit transaction;
RETURN 0
Я получаю ошибку на update
:
update top(t.Quantity) EXTERNAL_CODES
set BATCH_ID = (select ID from BATCHES where NAME = t.Name)
, USED = 1
from (select Name, Quantity from @newBatches) t
where PRODUCT_ID = @productId and CODE_LEVEL = @lowestCodeLevel;
Ошибка здесь: update top(t.Quantity)
. Он не может найти t.Quantity
.
dbo.CreateBatchList
является:
CREATE TYPE [dbo].[CreateBatchList] AS TABLE
(
Name nVARCHAR(20),
Quantity int
)
Моя проблема заключается в том, что я не могу установить, чтобы обновить Quantity
строки. Есть идеи?
Ошибка (или предупреждение) сообщение:
SQL71005: Ссылка на t.Quantity колонке не может быть решена.
Возможно, я мог бы использовать MERGE
.
Я думаю, проблема заключается в том, что 't.Quantity' потенциально различается для каждой строки в предложении from. кроме того, нет смысла «топ» без «порядка». –
Сообщение об ошибке (или предупреждении): SQL71005: ссылка на столбец t.Quantity не может быть разрешена. – VansFannel
, потому что это часть предложения from, что означает, что это решение для каждой строки в обновлении. число в 'top (number)' должно быть числом, которое принято ** перед ** оператором обновления ... –