Napisałem procedurkę do automatycznego generowania kodów EAN dla towarów, które ich nie mają i chciałem podpiąć ją pod wykres. Procedura działa, ale jak wywołam ją przed instrukcją SELECT wykresu, to już nie wraca z powrotem (?) i SELECT się nie wykonuje, co generuje błąd:
800A0E78 (ERR_ADO_ObjectClosed)
Jak zamienię kolejność, to SELECT działa, ale nie widać wyników działania procedury.
Kod: Zaznacz cały
@PAR ?@HS50|ZazGUID|&ZazGUID:REG= @? PAR@
DECLARE @ZZZ Varchar(50) = ??ZazGUID
SELECT
1 '1',
Twr_EAN 'EAN',
Twr_Kod 'Kod towaru',
Twr_Katalog 'Kod producenta',
Twr_Nazwa 'Nazwa'
FROM
CDN.TwrKarty
INNER JOIN CDN.WkrZaznaczenia2 ON Twr_GIDTyp=WKZ2_GIDTyp AND TWR_GIDNumer=WKZ2_GIDNumer
WHERE WkZ2_GUID = @ZZZ
Exec CDN.TSetEan @ZZZ,1,'';
Kod: Zaznacz cały
Alter Procedure [CDN].[TSetEan]
@ZazGUID VARCHAR(50),
@Zakres int,
@MinEAN varchar(40)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @EAN VARCHAR(40);
EXEC CDN.GenerujEAN @Zakres,'',@EAN OUTPUT;
SET NOCOUNT OFF
SET @EAN = LEFT(@EAN, LEN(@EAN) - 1);
;WITH CTE AS (
SELECT
Twr_GIDTyp,
TWR_GIDNumer,
TWR_Kod,
ROW_NUMBER() OVER (ORDER BY TWR_GIDNumer) AS RowNum
FROM
CDN.TwrKarty
INNER JOIN
CDN.WkrZaznaczenia2 AS wkz2 ON Twr_GIDTyp = wkz2.WKZ2_GIDTyp AND TWR_GIDNumer = wkz2.WKZ2_GIDNumer
WHERE
wkz2.WkZ2_GUID = @ZazGUID
AND Twr_EAN IS NULL or Twr_EAN = ''
)
UPDATE twk SET
twk.Twr_EAN = CDN.CyfraKontrolnaEAN(CAST(@EAN + RowNum -1 AS VARCHAR(40)))
FROM
CDN.TwrKarty AS twk
INNER JOIN
CTE ON twk.TWR_GIDNumer = CTE.TWR_GIDNumer
END