Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 3/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Server Numarator
#1
Mrb;

   SQL Server komut ile içeriğinde harf ve rakam olan (A-5266, MHS-0002 gibi) makbuz veya fatura numarasını 1 arttırılmış şekilde alabilirmiyiz. Max komutu sadece sayısal değer alıyor içerisinde harf olduğunda kabul etmiyor
Cevapla
#2
(11-07-2017, Saat: 13:48)CaglarCoskun Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMrb;

   SQL Server komut ile içeriğinde harf ve rakam olan (A-5266, MHS-0002 gibi) makbuz veya fatura numarasını 1 arttırılmış şekilde alabilirmiyiz. Max komutu sadece sayısal değer alıyor içerisinde harf olduğunda kabul etmiyor

Selam,

Bir çok kombinasyonla bu sorunu çözebilirsin, misal;

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Uğur PARLAYAN>
-- Create date: <2017-07-11-1440>
-- Description:  <Kodlu Numerik ifadelerin sayısal kısmını verir...>
-- =============================================
ALTER FUNCTION dbo.fn_int_Kod_Sayisal      
-- CREATE FUNCTION [dbo].[fn_int_Kod_Sayisal]  -->  İLK DEFA OLUŞTURACAKSANIZ ALTER YERİNE BU SATIRI KULLANIN
(
  @KodluBilgi  VARCHAR(50) -->  HAM DATA GELECEK
,  @Ayrac       VARCHAR(1)  -->  AYRAÇ İŞARETİ GELECEK
)
RETURNS INT
AS  BEGIN
  DECLARE @X INT = CHARINDEX(@Ayrac, REVERSE( @KodluBilgi) )  -->  SAĞDAN SOLA DOĞRU GİDECEĞİZ... + EN SAĞDAKİ AYRACI BAZ ALIR...
  RETURN  CASE WHEN @X > 0
               THEN CAST(RIGHT(@KodluBilgi, (@X - 1)) AS INT)
               ELSE 0
          END
END

--------------------------------------------------------------
--  BU NOKTADAN SONRASI TAMAMEN KULLANIM ÖRNEKLERİNİ İÇERİR --
--------------------------------------------------------------

SELECT dbo.fn_int_Kod_Sayisal('MSB-2000001','-')
;

SELECT   dbo.fn_int_Kod_Sayisal( [FATURA NO SÜTUNUN] , '-')  /*!*/  + 1   /*!*/      AS  [BiAliasVer]
FROM     dbo.[SENİN FATURA TABLON]
ORDER BY [BiAliasVer] DESC --> Alias'a göre ters sıraladık...

Şu linki incelersen diğer alternatifleri de değerlendirebilirsin;

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#3
Ben de bu tarz bir iş için aşağıdaki gibi bir fonksiyon kullanıyorum:

ALTER FUNCTION [dbo].[fnGetBelgeKodu](@TableName SYSNAME, @Prefix VARCHAR(10) = '', @Suffix VARCHAR(10) = '')
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @RecordCount INT = 0

SELECT @RecordCount = ISNULL(
(
SELECT CONVERT(INT, last_value)
FROM sys.identity_columns
WHERE OBJECT_NAME(object_id) = @TableName
), 0
) + 1
RETURN (
SELECT
ISNULL(@Prefix, '') +
REPLICATE( '0' , 9 - LEN(@RecordCount) ) + CONVERT(VARCHAR, @RecordCount) +
ISNULL(@Suffix, '')
  ) 
END

Kullanımı ise;

SELECT dbo.fnGetBelgeKodu('t_Stok_Main', 'ÖNEK-', '-SONEK')
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#4
Selam,

SQL Server'in 2008 ve sonrasını kullanıyorsanız şu şekilde optimize edilebilir...

ALTER FUNCTION dbo.fnGetBelgeKodu ( @TableName SYSNAME
                                  , @Prefix    VARCHAR(10)  --> parametresiz bırakılamayacağından default değer tanımlanmasına gerek yok
                                  , @Suffix    VARCHAR(10)  --> parametresiz bırakılamayacağından default değer tanımlanmasına gerek yok
                                  )
RETURNS VARCHAR(30)  --> NVARCHAR olmasının bir anlamı yok, çünkü parametreler VARCHAR olarak geliyor, şart ise tümünü NVARCHAR yapmalısınız
AS  BEGIN
    DECLARE @RecordCount INT = ISNULL(IDENT_CURRENT( @TableName ), 0) + 1
    RETURN  CONCAT( ISNULL( @Prefix, '')
                  , REPLICATE( '0', 9 - LEN(@RecordCount) )
                  , CONVERT( VARCHAR(9), @RecordCount)
                  , ISNULL( @Suffix, '')
                  )
END
GO
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#5
Firebird için de şöyle bir kullanım var;
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

“Do. Or do not. There is no try.”
Cevapla
#6
Teşekkür ederim çalıştı. Danışmak istediğim bir sorun daha var. Son belge numarasını hangi alana göre alacağını nasıl belirleyebilirim. Bu sorgu sonucu numara dönderiyor fakat kişinin girdiği son makbuz numarasını alarak sonuç döndürmeli. Son makbuz numarası müş.00135 ise yeni numara müş.00136 gibi
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQl Server içinde değere göre kontrol yapmak Bay_Y 6 381 22-08-2018, Saat: 23:34
Son Yorum: Bay_Y
  SQL Server Üzerinden Kümülatif Toplam Gösterimi adelphiforumz 4 504 16-03-2018, Saat: 09:15
Son Yorum: esistem
  MSSQL Server Hakkında Bilmek İstedikleriniz esrehmaan 23 2.633 19-02-2018, Saat: 09:57
Son Yorum: klavye
  Sql Server Otomatik Kurulum narkotik 7 581 13-01-2018, Saat: 22:30
Son Yorum: narkotik
  SQL Server veritabanını Suspect & Emergency modundan kurtarmak Abdullah ILGAZ 2 555 23-12-2017, Saat: 08:52
Son Yorum: Abdullah ILGAZ



Konuyu Okuyanlar: 1 Ziyaretçi