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
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol # Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol # Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol # Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol # Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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 Otomatik Kurulum narkotik 7 151 13-01-2018, Saat: 22:30
Son Yorum: narkotik
  SQL Server veritabanını Suspect & Emergency modundan kurtarmak Abdullah ILGAZ 2 181 23-12-2017, Saat: 08:52
Son Yorum: Abdullah ILGAZ
  SQL Server - Client Güncelleme CaglarCoskun 10 432 14-08-2017, Saat: 11:06
Son Yorum: uparlayan
  MS-SQL Server Procedure Tavsiyeleriniz Fesih ARSLAN 21 1.117 28-07-2017, Saat: 08:21
Son Yorum: Fesih ARSLAN
  SQL Server Management Studio Nasıl Onarılır ? DelphiCanR 0 404 03-05-2017, Saat: 10:46
Son Yorum: DelphiCanR



Konuyu Okuyanlar: 1 Ziyaretçi