﻿/*
VPKI_DataDB의 배포 스크립트

이 코드는 도구를 사용하여 생성되었습니다.
파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
변경 내용이 손실됩니다.
*/

GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

SET NUMERIC_ROUNDABORT OFF;


GO
/*
:setvar DatabaseName "VPKI_DataDB"
:setvar DefaultFilePrefix "VPKI_DataDB"
:setvar DefaultDataPath "D:\MSSQL\DATA\"
:setvar DefaultLogPath "D:\MSSQL\DATA\"
*/

GO
:on error exit
GO
/*
SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다.
SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다.
SET NOEXEC OFF; 
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
    BEGIN
        PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.';
        SET NOEXEC ON;
    END


GO
USE [$(DatabaseName)];


GO
/*
[dbo].[tCertificate].[cDn] 열이 삭제되므로 데이터 손실이 발생할 수 있습니다.

테이블 [dbo].[tCertificate]의 열 [[dbo].[tCertificate].[cCsrsignature]]을(를) 추가해야 하지만 해당 열에 기본값이 없으며 NULL 값을 허용하지 않습니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 열에 기본값을 추가 및 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.

[dbo].[tCertificate] 테이블의 cCert 열을 NULL에서 NOT NULL로 변경해야 합니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 모든 행에 대해 이 열에 값을 추가 또는 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.

[dbo].[tCertificate] 테이블의 cMessage 열을 NULL에서 NOT NULL로 변경해야 합니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 모든 행에 대해 이 열에 값을 추가 또는 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.
*/

IF EXISTS (select top 1 1 from [dbo].[tCertificate])
    RAISERROR (N'행이 발견되었습니다. 데이터가 손실될 수 있으므로 스키마 업데이트가 종료됩니다.', 16, 127) WITH NOWAIT

GO
/*
[dbo].[tTbscsr].[cCsrsignature] 열이 삭제되므로 데이터 손실이 발생할 수 있습니다.

[dbo].[tTbscsr].[cTbscsrOrigin] 열이 삭제되므로 데이터 손실이 발생할 수 있습니다.

테이블 [dbo].[tTbscsr]의 열 [[dbo].[tTbscsr].[cDn]]을(를) 추가해야 하지만 해당 열에 기본값이 없으며 NULL 값을 허용하지 않습니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 열에 기본값을 추가 및 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.

테이블 [dbo].[tTbscsr]의 열 [[dbo].[tTbscsr].[cOriginTbscsr]]을(를) 추가해야 하지만 해당 열에 기본값이 없으며 NULL 값을 허용하지 않습니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 열에 기본값을 추가 및 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.
*/

IF EXISTS (select top 1 1 from [dbo].[tTbscsr])
    RAISERROR (N'행이 발견되었습니다. 데이터가 손실될 수 있으므로 스키마 업데이트가 종료됩니다.', 16, 127) WITH NOWAIT

GO
PRINT N'[dbo].[tCertificate] 테이블 다시 빌드 시작...';


GO
BEGIN TRANSACTION;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET XACT_ABORT ON;

CREATE TABLE [dbo].[tmp_ms_xx_tCertificate] (
    [cCuid]         BIGINT          NOT NULL,
    [cCsrsignature] NVARCHAR (1024) NOT NULL,
    [cTierCode]     NVARCHAR (20)   NOT NULL,
    [cUnitCode]     NVARCHAR (20)   NOT NULL,
    [cVehicleCode]  NVARCHAR (20)   NOT NULL,
    [cLocalCode]    NVARCHAR (20)   NOT NULL,
    [cBrandCode]    NVARCHAR (20)   NOT NULL,
    [cCsr]          NVARCHAR (2048) NOT NULL,
    [cCert]         NVARCHAR (2048) NOT NULL,
    [cMessage]      NVARCHAR (250)  NOT NULL,
    [cIssueCount]   INT             NOT NULL,
    [cDateTime]     DATETIME2 (7)   NOT NULL,
    PRIMARY KEY CLUSTERED ([cCuid] ASC)
);

IF EXISTS (SELECT TOP 1 1 
           FROM   [dbo].[tCertificate])
    BEGIN
        INSERT INTO [dbo].[tmp_ms_xx_tCertificate] ([cCuid], [cCsr], [cTierCode], [cUnitCode], [cVehicleCode], [cLocalCode], [cBrandCode], [cCert], [cMessage], [cIssueCount], [cDateTime])
        SELECT   [cCuid],
                 [cCsr],
                 [cTierCode],
                 [cUnitCode],
                 [cVehicleCode],
                 [cLocalCode],
                 [cBrandCode],
                 [cCert],
                 [cMessage],
                 [cIssueCount],
                 [cDateTime]
        FROM     [dbo].[tCertificate]
        ORDER BY [cCuid] ASC;
    END

DROP TABLE [dbo].[tCertificate];

EXECUTE sp_rename N'[dbo].[tmp_ms_xx_tCertificate]', N'tCertificate';

COMMIT TRANSACTION;

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;


GO
PRINT N'[dbo].[tTbscsr] 테이블 다시 빌드 시작...';


GO
BEGIN TRANSACTION;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET XACT_ABORT ON;

CREATE TABLE [dbo].[tmp_ms_xx_tTbscsr] (
    [cCuid]         BIGINT          IDENTITY (1, 1) NOT NULL,
    [cIftid]        NVARCHAR (100)  NOT NULL,
    [cMacaddr]      NVARCHAR (100)  NOT NULL,
    [cWmi]          NVARCHAR (20)   NOT NULL,
    [cIdType]       NVARCHAR (10)   NOT NULL,
    [cSupplierId]   NVARCHAR (10)   NOT NULL,
    [cDc]           NVARCHAR (20)   NOT NULL,
    [cTierCode]     NVARCHAR (20)   NOT NULL,
    [cUnitCode]     NVARCHAR (20)   NOT NULL,
    [cPublickey]    NVARCHAR (1024) NOT NULL,
    [cCertType]     NVARCHAR (20)   NOT NULL,
    [cOriginTbscsr] NVARCHAR (4000) NOT NULL,
    [cHashedTbscsr] NVARCHAR (1024) NOT NULL,
    [cPcid]         NVARCHAR (50)   NOT NULL,
    [cDn]           NVARCHAR (250)  NOT NULL,
    [cDateTime]     DATETIME2 (7)   NOT NULL,
    PRIMARY KEY CLUSTERED ([cCuid] ASC)
);

IF EXISTS (SELECT TOP 1 1 
           FROM   [dbo].[tTbscsr])
    BEGIN
        SET IDENTITY_INSERT [dbo].[tmp_ms_xx_tTbscsr] ON;
        INSERT INTO [dbo].[tmp_ms_xx_tTbscsr] ([cCuid], [cIftid], [cMacaddr], [cWmi], [cIdType], [cSupplierId], [cDc], [cTierCode], [cUnitCode], [cPublickey], [cCertType], [cHashedTbscsr], [cPcid], [cDateTime])
        SELECT   [cCuid],
                 [cIftid],
                 [cMacaddr],
                 [cWmi],
                 [cIdType],
                 [cSupplierId],
                 [cDc],
                 [cTierCode],
                 [cUnitCode],
                 [cPublickey],
                 [cCertType],
                 [cHashedTbscsr],
                 [cPcid],
                 [cDateTime]
        FROM     [dbo].[tTbscsr]
        ORDER BY [cCuid] ASC;
        SET IDENTITY_INSERT [dbo].[tmp_ms_xx_tTbscsr] OFF;
    END

DROP TABLE [dbo].[tTbscsr];

EXECUTE sp_rename N'[dbo].[tmp_ms_xx_tTbscsr]', N'tTbscsr';

COMMIT TRANSACTION;

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;


GO
PRINT N'업데이트가 완료되었습니다.';


GO
