Sql server SQL Server在同时重复录制
我想通过使用while循环从两个表中导入数据进行记录 表1:ÜRÜNLER 表2:SABLONLAR 表3:所有产品 SABLONLAR表中包括URUNLER产品的变化 我想将产品变体添加到AllProducts表中 第一个周期正常发生 在2rd循环中,记录被添加为2条记录。 在第三个循环中,记录被添加为3个记录。 在第4个循环中,记录被添加为4个记录。 ... 在第20个循环中,记录被添加为20个记录。 ... 就这样 我哪里出错了Sql server SQL Server在同时重复录制,sql-server,while-loop,Sql Server,While Loop,我想通过使用while循环从两个表中导入数据进行记录 表1:ÜRÜNLER 表2:SABLONLAR 表3:所有产品 SABLONLAR表中包括URUNLER产品的变化 我想将产品变体添加到AllProducts表中 第一个周期正常发生 在2rd循环中,记录被添加为2条记录。 在第三个循环中,记录被添加为3个记录。 在第4个循环中,记录被添加为4个记录。 ... 在第20个循环中,记录被添加为20个记录。 ... 就这样 我哪里出错了 DECLARE @URUNLER TABLE (ID int
DECLARE @URUNLER TABLE (ID int, VARYASYONSABLONID int, BARKOD varchar(50), STOKKOD varchar(50), BASLIK varchar(500))
INSERT INTO @URUNLER
SELECT ID, VARYASYONSABLONID, BARKOD, STOKKOD, BASLIK
FROM URUNLER
DECLARE @ToplamUrun int = (SELECT COUNT(VARYASYONSABLONID) FROM @URUNLER)
DECLARE @SABLONLARALL TABLE ([ID] [int], [STOKKODU] [varchar](500),[INDIRIMLIFIYAT] [decimal](18, 2), [STOKFIYATI] [decimal](18, 2), [STOKFIYATI_OLD] [decimal](18, 2), [OZELLIK1] [varchar](500), [OZELLIK2] [varchar](500), [MALIYETTABLO] [varchar](50), [ISIM1] [varchar](500), [ISIM2] [varchar](500), [MIKTAR] [varchar](500), [MALIYETTUTARI] [decimal](18, 2), [PIYASAFIYATI] [decimal](18, 2), [GTIN] [varchar](500), [MPN] [varchar](500),[BUNDLE] [bit], [SABLONID] [int], [TABLOADET] [int])
INSERT INTO @SABLONLARALL
SELECT
[ID], [STOKKODU], [INDIRIMLIFIYAT], [STOKFIYATI], [STOKFIYATI_OLD],
[OZELLIK1], [OZELLIK2], [MALIYETTABLO], [ISIM1], [ISIM2],
[MIKTAR], [MALIYETTUTARI], [PIYASAFIYATI], [GTIN], [MPN],
[BUNDLE] [bit], [SABLONID], [TABLOADET]
FROM
SABLONLAR
DECLARE @WhileCount int = 0;
DECLARE @While2Count int;
DECLARE @SABLONCOUNT int;
WHILE @WhileCount <= @ToplamUrun
Begin
SET @While2Count = 0;
declare @ID int;
declare @VARYASYONSABLONID int;
declare @BARKOD varchar(50);
declare @STOKKOD varchar(50);
declare @BASLIK varchar(500);
SELECT @ID = ID, @VARYASYONSABLONID = VARYASYONSABLONID, @BARKOD = BARKOD, @STOKKOD = STOKKOD, @BASLIK = BASLIK from @URUNLER ORDER BY ID OFFSET @WhileCount ROWS FETCH NEXT 1 ROWS ONLY
declare @SABLON Table ([ID] [int],[STOKKODU] [varchar](500),[INDIRIMLIFIYAT] [decimal](18, 2),[STOKFIYATI] [decimal](18, 2),[STOKFIYATI_OLD] [decimal](18, 2),[OZELLIK1] [varchar](500),[OZELLIK2] [varchar](500),[MALIYETTABLO] [varchar](50),[ISIM1] [varchar](500),[ISIM2] [varchar](500),[MIKTAR] [varchar](500),[MALIYETTUTARI] [decimal](18, 2),[PIYASAFIYATI] [decimal](18, 2),[GTIN] [varchar](500),[MPN] [varchar](500),[BUNDLE] [bit],[SABLONID] [int],[TABLOADET] [int])
Insert into @SABLON select [ID],[STOKKODU],[INDIRIMLIFIYAT],[STOKFIYATI],[STOKFIYATI_OLD],[OZELLIK1],[OZELLIK2],[MALIYETTABLO],[ISIM1],[ISIM2],[MIKTAR],[MALIYETTUTARI],[PIYASAFIYATI],[GTIN],[MPN],[BUNDLE] [bit],[SABLONID],[TABLOADET] from SABLONLAR WHERE SABLONID = @VARYASYONSABLONID
SET @SABLONCOUNT = (select Count(STOKKODU) from @SABLON)
While @While2Count <= @SABLONCOUNT
BEGIN
declare @IDx int;
declare @PIYASAFIYATI decimal(18,5);
declare @STOKFIYATI decimal(18,5);
declare @OZELLIK1 varchar(255);
declare @OZELLIK2 varchar(255);
declare @VSTOKKOD varchar(255);
SELECT @IDx = ID, @PIYASAFIYATI = PIYASAFIYATI, @STOKFIYATI = STOKFIYATI, @OZELLIK1 = OZELLIK1, @OZELLIK2 = OZELLIK2, @VSTOKKOD = STOKKODU from @SABLON ORDER BY ID OFFSET @While2Count ROWS FETCH NEXT 1 ROWS ONLY
IF @PIYASAFIYATI is null
BEGIN
SET @PIYASAFIYATI = (@STOKFIYATI / 100) * 140;
END
declare @KALAN decimal(18,5) = @PIYASAFIYATI % 5;
if @KALAN > 0
BEGIN
SET @PIYASAFIYATI = @PIYASAFIYATI + (5 - @KALAN)
END
declare @KALAN2 decimal(18,5) = @STOKFIYATI % 5;
if @KALAN2 > 0
BEGIN
SET @STOKFIYATI = @STOKFIYATI + (5 - @KALAN2)
END
select '@WhileCount' = @WhileCount,'@While2Count' = @While2Count
INSERT INTO [dbo].[ALLProducts]
([Baslik]
,[Barkod]
,[StokKodu]
,[PiyasaFiyati]
,[SatisFiyati])
VALUES
(@BASLIK + ' ' + @STOKKOD + ' ' + REPLACE(@OZELLIK1, 'Tabloların 3''ü', '3 Tablo') + (CASE WHEN @OZELLIK2 is not null THEN ' ' + @OZELLIK2 ELSE '' END)
,@BARKOD + REPLACE(@VSTOKKOD, '-', '')
,@STOKKOD + @VSTOKKOD
,@PIYASAFIYATI
,@STOKFIYATI)
Set @While2Count +=1;
END
Set @WhileCount +=1;
END
一定是
形成
艾德·艾特:
URUNLER表包含产品的主要信息
在SABLONLAR表格中,产品的变量值包括尺寸、鞋尺寸、表格尺寸类型
我还将制作一个AllProducts表。每个变体选项将在此表中显示为单个产品
一个简单的例子
这是URUNLER表中的产品
这是Sablonal表中的模板
现在,让我们在AllProducts表中分别保存产品
真正的问题是你为什么要先用一段时间。SQL是一种基于集合的语言,您应该使用基于集合的解决方案。你到底想在这里实现什么?将两个表中的数据组合起来创建一个产品。因此,在所有产品中插入选择*from URUNLER internal join SABLONLAR on URUNLER.STOKKOD=SABLONLAR.STOKKODU?。听@Larnu,忘记为此使用WHILE循环。并且可以提供一个有用的替代方案谢谢你的帮助。