ALTER TRIGGER [dbo].[tr_Zzzqa_TwTowar_KreskowyEan13] ON [dbo].[tw__Towar] AFTER INSERT, UPDATE AS DECLARE TrigTempUpdate_Cursor CURSOR FOR SELECT tw_Id, tw_PodstKodKresk, tw_PLU FROM Inserted DECLARE @tw_id int, @twkod varchar(20), @tw_plu int OPEN TrigTempUpdate_Cursor; FETCH NEXT FROM TrigTempUpdate_Cursor INTO @tw_id, @twkod, @tw_plu WHILE @@FETCH_STATUS = 0 BEGIN -- PLU -- if (@tw_plu is null or @tw_plu = 0) begin SELECT @tw_plu =(SELECT MAX(tw_PLU) FROM tw__towar) if (@tw_plu <0) set @tw_plu=0 set @tw_plu = @tw_plu+1 UPDATE tw__Towar set tw_PLU = @tw_plu , tw_urznazwa = replicate('0', 5-len(@tw_plu))+convert(varchar, @tw_plu) + '_' + left(tw_nazwa,18) WHERE tw_id=@tw_id end else UPDATE tw__Towar set tw_urznazwa = replicate('0', 5-len(@tw_plu))+convert(varchar, @tw_plu) + '_' + left(tw_nazwa,18) WHERE tw_id=@tw_id -- kod kreskowy -- if (LEN(@twkod) = 0) begin declare @maxkod bigint, @kod varchar(13), @i int, @suma int, @mnoznik int; set @maxkod = isnull( (SELECT cast (MAX(SUBSTRING(tw_PodstKodKresk, 1, 12)) as bigint) as maxkod FROM [dbo].[tw__Towar] WHERE [tw_PodstKodKresk] LIKE '20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' ), 200000000000); set @maxkod = @maxkod +1; set @kod = CAST(@maxkod as varchar(12)); set @i = 1; set @suma = 0; while(@i <= 12) begin if (@i % 2 = 0) set @mnoznik = 3; else set @mnoznik = 1; set @suma = @suma + @mnoznik * CAST( SUBSTRING(@kod, @i, 1) as int); set @i = @i + 1; end set @suma = @suma % 10; if (@suma > 0) set @suma = 10 - @suma; set @kod = @kod + CAST(@suma as varchar(1)); UPDATE tw__Towar SET tw_PodstKodKresk = @kod where tw_Id = @tw_id; end FETCH NEXT FROM TrigTempUpdate_Cursor INTO @tw_id, @twkod, @tw_plu; END; CLOSE TrigTempUpdate_Cursor; DEALLOCATE TrigTempUpdate_Cursor;