Forum
Vedat bey sorgunu aşağıda ki hatayı vermekte,
Mecutta bu şekild etabloyu oluşturdum. Sorguda DECLARE @KOD VARCHAR(15)='' kısmından itibaren çalıştırıyorum.
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Msg 137, Level 15, State 1, Line 26
Must declare the scalar variable "@GUNCELBAKIYE".
Msg 319, Level 15, State 1, Line 31
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.
"Dalgasız denizde, herkes kaptandır."
Çalıştırdığım soru ;
DECLARE @KOD VARCHAR(15)=''
DECLARE @DEPO VARCHAR(15)=''
DECLARE @GUNCELBAKIYE DECIMAL(38,2)=0
DECLARE @ONCEKIBAKIYE DECIMAL(38,2)=0
UPDATE T
SET @GUNCELBAKIYE = GUNCELBAKIYE = MIKTAR + CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE ELSE 0 END,
@ONCEKIBAKIYE = ONCEKIBAKIYE = CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE-MIKTAR ELSE 0 END,
@KOD=KOD,
@DEPO=DEPOKODU
FROM TABLOMX AS T WITH(TABLOCK)
OPTION (MAXDOP 1);
SELECT * FROM TABLOMX
HATA ;
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Msg 137, Level 15, State 1, Line 7
Must declare the scalar variable "@GUNCELBAKIYE".
Msg 319, Level 15, State 1, Line 12
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.
"Dalgasız denizde, herkes kaptandır."
Sadece tarih detayında tuttuğunuz tablonuzda stoklarınız gün içerisinde negatif değere ulaşabilir ve bunu farketmezsiniz. Örneğin sabahtan 10 olan değer öğlen -5 olup öğleden sonra 100 olabilir. Tarih bilginize detaylı saat bilgisi eklemeniz yerinde olacaktır.
İyi çalışmalar.
Yürüyen bakiye bilgisi lazım bana, gün içerisinde ki - bakiye, gün sonunda + dönüyorsa sorun yok.
Günün sonunda - kapanan günü bulmak istiyorum.
"Dalgasız denizde, herkes kaptandır."
Merhaba,
Mssql Server sürümünüz nedir ?
حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]
Merhaba,
Mssql Server sürümünüz nedir ?
Merhaba,
SQL 2005
"Dalgasız denizde, herkes kaptandır."
Merhaba,
Bilgi için teşekkürler. Mssql 2008 ve üstü versiyonlarda değişken verdikten sonra default değerini ='' verirken, Mssql 2005 ve aşağısındaki sürümlerde aşağıdaki şeklinde Set atarak vermek gerekiyor.
Sorguyu aşağıdaki şekilde değiştirip deneyin.
SET NOCOUNT ON
If(OBJECT_ID('tempdb..#TABLOM') Is Not Null)
Begin
Drop Table #TABLOM
End
CREATE TABLE #TABLOM
(
TARIH DATETIME,
KOD VARCHAR(15),
MIKTAR DECIMAL(38,2),
DEPOKODU VARCHAR(15),
ONCEKIBAKIYE DECIMAL(38,2),
GUNCELBAKIYE DECIMAL(38,2)
)
INSERT INTO #TABLOM (TARIH,KOD,MIKTAR,DEPOKODU,ONCEKIBAKIYE,GUNCELBAKIYE)
SELECT '2019-12-10','A001',10,'100',0,0 UNION ALL
SELECT '2019-12-10','A001',-10,'100',0,0 UNION ALL
SELECT '2019-12-10','A001',10,'102',0,0 UNION ALL
SELECT '2019-12-10','B001',10,'100',0,0 UNION ALL
SELECT '2019-12-20','B001',-20,'100' ,0,0
CREATE CLUSTERED INDEX COZUMPARK ON #TABLOM(KOD,DEPOKODU,TARIH)
DECLARE @KOD VARCHAR(15)
SET @KOD = ''
DECLARE @DEPO VARCHAR(15)
SET @DEPO = ''
DECLARE @GUNCELBAKIYE DECIMAL(38,2)
SET @GUNCELBAKIYE=0
DECLARE @ONCEKIBAKIYE DECIMAL(38,2)
SET @ONCEKIBAKIYE=0
UPDATE T
SET @GUNCELBAKIYE = GUNCELBAKIYE = MIKTAR + CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE ELSE 0 END,
@ONCEKIBAKIYE = ONCEKIBAKIYE = CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE-MIKTAR ELSE 0 END,
@KOD=KOD,
@DEPO=DEPOKODU
FROM #TABLOM AS T WITH(TABLOCK,INDEX(COZUMPARK))
OPTION (MAXDOP 1);
SELECT * FROM #TABLOM
حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]
Çok sağol, şimdi sorgu çalıştı.
"Dalgasız denizde, herkes kaptandır."
Alternatif olarak Döngü ile çözümünü yapmıştım.
Biraz ağır çalışır bilginiz olsun.
SET NOCOUNT ON
If(OBJECT_ID('tempdb..#SONUC') Is Not Null)
Begin
Drop Table #SONUC
End
CREATE TABLE #SONUC
(
TARIH DATETIME,
KOD VARCHAR(15),
MIKTAR DECIMAL(38,2),
DEPOKODU VARCHAR(15),
ONCEKIBAKIYE DECIMAL(38,2),
GUNCELBAKIYE DECIMAL(38,2)
)
If(OBJECT_ID('tempdb..#TABLOM') Is Not Null)
Begin
Drop Table #TABLOM
End
CREATE TABLE #TABLOM
(
TARIH DATETIME,
KOD VARCHAR(15),
MIKTAR DECIMAL(38,2),
DEPOKODU VARCHAR(15)
)
INSERT INTO #TABLOM (TARIH,KOD,MIKTAR,DEPOKODU)
SELECT '2019-12-10','A001',10,'100' UNION ALL
SELECT '2019-12-10','A001',-10,'100' UNION ALL
SELECT '2019-12-10','A001',10,'102' UNION ALL
SELECT '2019-12-10','B001',10,'100' UNION ALL
SELECT '2019-12-20','B001',-20,'100'
CREATE CLUSTERED INDEX COZUMPARK ON #TABLOM(KOD,DEPOKODU,TARIH)
DECLARE @GUNCELBAKIYE DECIMAL(38,2)
SET @GUNCELBAKIYE=0
DECLARE @ONCEKIBAKIYE DECIMAL(38,2)
DECLARE @ALTBAKIYE DECIMAL(38,2)
SET @ONCEKIBAKIYE=0
DECLARE @KOD VARCHAR(15),@DEPO VARCHAR(15)
DECLARE STOKKART CURSOR FOR
SELECT KOD,DEPOKODU FROM #TABLOM
GROUP BY KOD,DEPOKODU
OPEN STOKKART
FETCH NEXT FROM STOKKART INTO @KOD,@DEPO
WHILE @@FETCH_STATUS=0
BEGIN
IF @@ERROR=0
BEGIN
SET @GUNCELBAKIYE=0
SET @ONCEKIBAKIYE=0
DECLARE @TARIH DATETIME,@MIKTAR DECIMAL(38,2)
DECLARE HAREKET CURSOR FOR
SELECT TARIH,MIKTAR FROM #TABLOM
WHERE KOD=@KOD AND DEPOKODU=@DEPO
ORDER BY TARIH ASC
OPEN HAREKET
FETCH NEXT FROM HAREKET INTO @TARIH,@MIKTAR
WHILE @@FETCH_STATUS=0 BEGIN
IF @@ERROR =0
BEGIN
SET @GUNCELBAKIYE = @GUNCELBAKIYE + @MIKTAR
SET @ONCEKIBAKIYE = @ONCEKIBAKIYE + @GUNCELBAKIYE-@MIKTAR
INSERT INTO #SONUC (TARIH,KOD,MIKTAR,DEPOKODU,ONCEKIBAKIYE,GUNCELBAKIYE)
VALUES (@TARIH,@KOD,@MIKTAR,@DEPO,@ONCEKIBAKIYE,@GUNCELBAKIYE)
END
FETCH NEXT FROM HAREKET INTO @TARIH,@MIKTAR
END
CLOSE HAREKET
DEALLOCATE HAREKET
END
FETCH NEXT FROM STOKKART INTO @KOD,@DEPO
END
CLOSE STOKKART
DEALLOCATE STOKKART
SELECT * FROM #SONUC
حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]
Bu sorgunun digerinden farkı tam nedir?
Önceki sorgu baya işe yaradı,İstediğim alanları INTO ile yeni tabloya atadı, INDEX oluşturdum. hızlı bir şekilde işimi çözdü.
Allah razı olsun.
Sağol.
"Dalgasız denizde, herkes kaptandır."
Merhaba,
Cümlemizden.
İlk gönderdiğim sorgu yapı olarak hızlıdır. İkinci gönderdiğim sorguda Mssql döngü kurarak yazdım, bu yapı olarak ta biraz yavaştır. Örnek olması açısından ekledim.
Kullanmış olduğunuz erp proğramı nedir ?
حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]
Dinamo ERP, programda bir sorun yok. Parametre de ki hatalı tanımdan bir dönem - stok oluştu.
Sağolun
"Dalgasız denizde, herkes kaptandır."
Anladım, Bende Logo Go-Plus
İyi çalışmalar dilerim.
حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]