如何在选定年份的数据库上进行更改和工作,以及每年创建新的数据库

时间:2019-07-18 12:27:56

标签: c# sql .net sql-server

我正在使用C#/。NET,库,报表等进行会计项目 和MS-SQL Server。因此,例如,当每年关闭运行中的财务期时,例如 (2017年7月30日-2018年7月30日), 我想在新数据库中传输该年的所有数据和所有交易记录(您可以说一个新副本 该数据库的数据),并将所有记录保存在驱动器中较长的时间 长期证据的目的。并为新的财政年度创建新的数据库并处理新的交易等。  我的基本登录界面由几件事组成, 用户名(文本) 密码(文字) 财政年度下拉列表(“ 2016-2017”,“ 2017-2018”)。

当我使用2017-2018登录时,数据库被选择为新创建的 执行交易到此。但是如果我回溯期间(2016-2017),那么 不应在该数据库中进行任何编辑。

基于此查找我的描述和所需答案。 用户界面代码还不够,但是使用此用户界面创建数据库的SQL就是我在这里找到的答案。

任何可以在这个问题上帮助我的人

1 个答案:

答案 0 :(得分:0)

从问题中,我可以告诉您正在处理帐户类型的数据数据库,例如在关闭一个数据库时将在明年增加一些金额,等等可以在应用程序级别处理,但至于创建数据库,你可以简单地调用一个存储过程。这是一个可能有帮助的程序。

    create PROCEDURE [dbo].[CreateNewCompany]
    @CompName as varchar(max) ,--  for create New Company
    @BackupFilePath as varchar(max) -- Backup file path for Which Company DB is a copy for a new company
    As
    BEGIN 
    DECLARE @COL1 VARCHAR(256),@COL2 VARCHAR(256) -- Filename for backup    
    DECLARE @Lgfilenm1 VARCHAR(256) -- LogicalFilename for backup   
    DECLARE @Lgfilenm2 VARCHAR(256) -- LogicalFilename for backup   
    DECLARE @RestorePath VARCHAR(256)  -- PhysicalFilename for backup

    DECLARE @i int 
    set @i = 0

    --- Make Temp Table 
    create table TmtNewDB ( LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0)
    ,MaxSize numeric(20,0),Fileid tinyint,CreateLSN numeric(25,0),DropLSN numeric(25, 0),UniqueID uniqueidentifier,ReadOnlyLSN numeric(25,0),
    ReadWriteLSN numeric(25,0),BackupSizeInBytes bigint,SourceBlocSize int,FileGroupId int,LogGroupGUID uniqueidentifier,
    DifferentialBaseLSN numeric(25,0),DifferentialBaseGUID uniqueidentifier,IsReadOnly bit,IsPresent bit)

    insert TmtNewDB 
    EXEC ('restore filelistonly from disk = ''' + @BackupFilePath + '''')
    declare @a varchar(max),@posi int,@le int,@file varchar(max)
    DECLARE db_newdbb CURSOR FOR
    select LogicalName,PhysicalName from TmtNewDB

        OPEN db_newdbb  
        FETCH NEXT FROM db_newdbb INTO @COL1,@COL2 

        WHILE @@FETCH_STATUS = 0    
        BEGIN 
                if @i=0 
                begin
                    set @Lgfilenm1=@COL1
                    set @posi  = CHARINDEX('\',REVERSE(@COL2))
                    set @RestorePath=left(@COL2,len(@COL2)- @posi +1 )
                end
                else if @i=1 
                begin
                    set @Lgfilenm2 = @COL1
                end
        set @i = @i + 1
        FETCH NEXT FROM db_newdbb INTO @COL1,@COL2 
        END  

        CLOSE db_newdbb  
        DEALLOCATE db_newdbb

    declare @sql varchar(max)

     set @sql= 'RESTORE DATABASE  ' + @CompName + ' FROM  DISK = ''' + @BackupFilePath + ''' WITH  FILE = 1,
        MOVE N''' + @Lgfilenm1 + ''' TO N''' + @RestorePath+ @CompName + '.mdf' + ''',  
        MOVE N''' + @Lgfilenm2 + ''' TO N''' + @RestorePath+  @CompName + '_Log.ldf' + ''''
    -- print @sql
    -- @CompName check Company file already is created or not
    IF (EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE ('[' + name + ']' = @CompName OR name = @CompName)))
    begin
    print 'New Company Already Created------->newdbb'
    end
    else
    begin
    exec (@sql)
    print 'New Company Created Successfully------->newdbb'
    end

    END