SQL Table Dynamic partition on Database primary file group
Execute below query and dynamically get Date range for creating partition function & Partition scheme.
-- STEP 1 
create proc Usp_CreateDynamicTablePartiton
as
begin
declare @Primary varchar(max)='[PRIMARY]';
declare @PrimaryCount int=0
declare @Sql nvarchar(max)
declare @colList varchar(max)
set nocount on;
declare @t as table(StartDate datetime,Number int)
insert into @t SELECT 
    CAST(DATEADD(M,3*(NUMBER-1),DATEADD(YYYY,DATEDIFF(YYYY,1,T.TrDate),0)) AS DATE) [QT START DATE], NUMBER AS [QUARTER NAME]
FROM MASTER..SPT_VALUES 
cross apply
(
Select distinct TrtDate from dbo.Tbl_Transaction with(nolock)
) T
WHERE TYPE='P' 
    AND NUMBER BETWEEN 1 AND 6
	;with TblC
	as
	(
	Select distinct StartDate from @t
	)
	--select * from TblC
	Select @primaryCount=(Select distinct count(1) from TblC)
	SELECT
  @colList = STUFF (
    (
      SELECT
        DISTINCT ',' + QUOTENAME(cast(StartDate as date))
		from @t
		FOR XML PATH(''),
        Type
    ).value('.', 'NVARCHAR(MAX)'),
    1,
    1,
    ''
  )
  
  Set  @colList= Replace(@colList,'[','N''')
  Set @colList= Replace(@colList,']','T00:00:00''')
  
  --Select @primaryCount
  Select @Primary= CASE when Replicate('[PRIMARY],',@primaryCount+1) like'%,'
  Then LEFT(Replicate('[PRIMARY],',@primaryCount+1),
  Len(Replicate('[PRIMARY],',@primaryCount+1))-1)
  else Replicate('[PRIMARY],',@primaryCount+1) end
  --Select @Primary
  declare @IndexNum varchar(max)
  Set @indexNum = FORMAT(GETDATE(),'yyyymmddhhmmss')
  
  SET @Sql = 'CREATE PARTITION FUNCTION [Pfn_Transaction](datetime) AS RANGE LEFT FOR VALUES ('+@colList+')'
  SET @Sql = @Sql + ' 
  
  CREATE PARTITION SCHEME [PScheme_Transaction] AS PARTITION [Pfn_Transaction] TO ('+@Primary+')'
  --SELECT @Sql
  -- STEP 2 Uncomment Index And Execute
  SET @Sql = @SQl + ' 
  CREATE CLUSTERED INDEX [ClusteredIndex_on_PScheme_Transaction_'+@IndexNum+'] ON dbo.Tbl_Transaction
(
	[login_date]
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PScheme_Transaction]([login_date]) '
SET @Sql= @Sql + ' 
 --DROP INDEX [ClusteredIndex_on_PScheme_Transaction_'+@IndexNum+'] ON dbo.Tbl_Transaction '
--Select @Sql
exec sp_executesql @Sql
--DROP INDEX [ClusteredIndex_on_PScheme_Transaction_637672198925007456] ON dbo.Tbl_Transaction
end