Procedura licząca rok, ale każdy rok od nowa

0

Napisalem sobie taka rocedure

Chce ddodac rok,ale dla kazdego roku liczyc od nowa. 0000-0000-0001/1947 itd. Czy procedure mozna latwiej napisac? Poz JB.SQLserver 2014. Sprawdzone w petli na 300000 w vb.net 2012.

USE [FINANSE]
GO
/****** Object:  StoredProcedure [dbo].[uspAAANrNaTrzyPolaEndNoKoniec]    Script Date: 11.10.2023 16:37:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Jerzy Bierniak/47
-- Create date:Dzisiaj
-- Description:	poz
-- =============================================
ALTER PROCEDURE [dbo].[uspAAANrNaTrzyPolaEndNoKoniec]
--DECLARE
@sts1 as nvarchar(4)= NULL,
@sts2 as nvarchar(4) = NULL,
@sts3 as nvarchar(4) = NULL,
@Nr as nvarchar(14) = null,
@id as int = null
AS
BEGIN
	
	SET NOCOUNT ON

SET @Nr  = '9999-9999-9999'

SET @sts1 = (Select Right(@Nr,4))
SET @sts2 = (Select LEFT(Right(@Nr,9),4))
SET @sts3 = (Select LEFT(@Nr,4))
IF @sts1 = 9999  AND @sts2 = 9999 AND @sts3 = 9999
  BEGIN
    SET @Nr ='EndNo'
   SELECT  @Nr
  END
Else
   BEGIN
    IF @sts1 = 9999  AND @sts2 = 9999

     BEGIN
      SET @sts3 = Format(@sts3+1,'0000')
      SET @sts1 = '0000'
      SET @sts2 ='0000'
     END

    ELSE

BEGIN
SET @sts2= (SELECT FORMAT( IIF(@sts1 = 9999,@sts2 +1, @sts2 ),'0000'))
SET @sts1=(SELECT FORMAT(IIF(@sts1 < 9999, @sts1+1,0000),'0000'))
END

SET @Nr = (SELECT   @sts3+'/'+ @sts2+'/'+ @sts1)
SELECT  @Nr
End

END
1

W tej procedurze nie widzę jak i gdzie pobierasz ostatnie id, więc trudno doradzić.
Sama procedura mocno przekomplikowana, ty dodajesz 1 i pokazujesz w rozbiciu na 3, więc mozna tak:

DECLARE
@Nr as nvarchar(14) = null,
@id as bigint = null

SET @Nr = '9999-9999-9998'

set @id = replace(@nr,'-','')

select IIF(@id=999999999999,'EndNr',Format(@id+1,'0000/0000/0000'))

Dodanie roku to jest kwestia przypisania odpowiedniego ostatniego id z zdanego roku

0

Idea jest taka wielkie numery powiazac z liczbami peirwszym i wszysie stringi zakodowac, Brak mi petli na liczby pierwsze

0

nie rozumiem tego komentarza

0
USE [FINANSE]
GO
/****** Object:  StoredProcedure [dbo].[uspSPRAWDZIANnrNaTrzyZERATableWBazieJW]    Script Date: 13.10.2023 06:57:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:	Jerzy Bierniak/47
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[uspSPRAWDZIANnrNaTrzyZERATableWBazieJW]
-- DECLARE
@sts1 as nvarchar(4)= NULL,
@sts2 as nvarchar(4) = NULL,
@sts3 as nvarchar(4) = NULL,
@Nr as nvarchar(14) = null,	
@id as int = NULL

AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

 IF not  EXISTS (SELECT Nr FROM TblT1) 
-- SELECT   '9999-9999-9999'
BEGIN
--Insert Into TBlNaTrzySekcje000Pomocnicza (id,NrTrzyTrzySekcje)VaLUES(1,'0000-0000-0001')
INSERT INTO TblT1(id,Nr)VALUES(1,'0000-0000-0001')
 INSERT INTO TblT1Nr(id,Nr)
Values (1,'0000-0000-0001')
--SET @Nr  = '9999-9999-9999'


END
ELSE

BEGIN

SET @sts1 = (Select Right(Nr,4)FROM TblT1)
SET @sts2 = (Select LEFT(Right(Nr,9),4)FROM TblT1)
SET @sts3 = (Select LEFT(Nr,4)FROM TblT1)
SET @id =  (SELECT id+1 from TblT1)

If @sts1 ='9999' And @sts2  = '9999'
 BEGIN
  IF @sts1 ='9999' AND @sts2 ='9999'AND @sts3 = '9999'
   BEGIN
    SET @Nr = 'EndNo'
    --SELECT @Nr  
 INSERT INTO TblT1NR(id,Nr)VALUES(@id,@Nr)
  UPDATE TblT1 SET id=@id,Nr=@Nr 
  
   END
 END
ELSE

 BEGIN
  
    SET @Nr =(SELECT @sts3  +'-'+  FORMAT(Case WHEN @sts1=9999 THEN @sts2+1 ELSE @sts2 END ,'0000')
                       +'-'+  FORMAT(Case WHEN @sts1 = 9999 Then '0000' Else @sts1+1 END ,'0000'))
   
 
   UPDATE TblT1 SET id=@id,Nr=@Nr
   INSERT INTO TblT1Nr(id,Nr)VALUES(@id,@Nr)
  END
 END
 SELECT @Nr

END

Ma ktos petle na liczby pierwsze

1

Ma ktos petle na liczby pierwsze

https://www.geeksforgeeks.org/how-to-print-prime-numbers-in-ms-sql-server/

Chociaż zamiast liczyć lepiej zaimportować, będzie szybciej: https://t5k.org/lists/

0

Dzieki

Panczo napisał(a):

Ma ktos petle na liczby pierwsze

https://www.geeksforgeeks.org/how-to-print-prime-numbers-in-ms-sql-server/

Chociaż zamiast liczyć lepiej zaimportować, będzie szybciej: https://t5k.org/lists/

Dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1