From 1db24651ca8e21fcf10de8b9388a61204a7bd181 Mon Sep 17 00:00:00 2001 From: SHM Date: Mon, 4 Aug 2025 10:55:49 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=84=B1=ED=98=84=EB=AA=A8]=20DBPatch=20?= =?UTF-8?q?=EA=B0=84=EC=86=8C=ED=99=94,=20=EA=B2=BD=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DBPatch/DBPatch_AccountDB_Create.bat | 20 + DBPatch/DBPatch_AccountDB_Update.bat | 23 ++ DBPatch/DBPatch_UniqueKeyDB_Create.bat | 20 + DBPatch/DBPatch_UniqueKeyDB_Update.bat | 23 ++ .../Tool_AccountDB_Scaffold.bat | 0 .../SystemX.DB.AccountDB_Create.sql | 346 ++++++++++++++++++ .../SystemX.DB.AccountDB_Update.sql | 89 +++++ .../SystemX.DB.UniqueKeyDB_Create.sql | 290 +++++++++++++++ .../SystemX.DB.UniqueKeyDB_Update.sql | 57 +++ DBPatch/sqlScripts/_CreateDB.bat | 19 + DBPatch/sqlScripts/_UpdateDB.bat | 20 + DBPatch/sqlScripts/_UpdateScriptGenerate.bat | 11 + .../dacpac/SystemX.DB.AccountDB.dacpac | Bin 0 -> 3502 bytes .../dacpac/SystemX.DB.UniqueKeyDB.dacpac | Bin 0 -> 2614 bytes Projects/DLL/SystemX.Core.DB.dll | Bin 9728 -> 9728 bytes Projects/DLL/SystemX.Core.dll | Bin 50688 -> 50688 bytes .../SystemX.DB.AccountDB.sqlproj | 4 +- .../dbo/Scripts/scriptAfterBuild.sql | 0 .../dbo/Tables/tRefreshToken.sql | 0 .../SystemX.DB.AccountDB/dbo/Tables/tRole.sql | 0 .../SystemX.DB.AccountDB/dbo/Tables/tUser.sql | 0 .../SystemX.DB.UniqueKeyDB.sqlproj | 75 ++++ .../dbo/Tables/tUniqueKeyStorage.sql | 10 + .../SystemX.DB.UniqueKeyDB_Create.sql | 290 +++++++++++++++ ..._UpdateAccountDB.bat => _UpdateScript.bat} | 0 .../dacpac/SystemX.DB.AccountDB.dacpac | Bin 3504 -> 3500 bytes .../dacpac/SystemX.DB.UniqueKeyDB.dacpac | Bin 0 -> 2615 bytes Projects/SystemX.Core/SystemX.Core.sln | 26 +- Tools/sqlpackage_install.bat | 3 + 29 files changed, 1318 insertions(+), 8 deletions(-) create mode 100644 DBPatch/DBPatch_AccountDB_Create.bat create mode 100644 DBPatch/DBPatch_AccountDB_Update.bat create mode 100644 DBPatch/DBPatch_UniqueKeyDB_Create.bat create mode 100644 DBPatch/DBPatch_UniqueKeyDB_Update.bat rename Projects/Tools/Tools_Scaffold_AccountDB.bat => DBPatch/Tool_AccountDB_Scaffold.bat (100%) create mode 100644 DBPatch/sqlScripts/SystemX.DB.AccountDB_Create.sql create mode 100644 DBPatch/sqlScripts/SystemX.DB.AccountDB_Update.sql create mode 100644 DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql create mode 100644 DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Update.sql create mode 100644 DBPatch/sqlScripts/_CreateDB.bat create mode 100644 DBPatch/sqlScripts/_UpdateDB.bat create mode 100644 DBPatch/sqlScripts/_UpdateScriptGenerate.bat create mode 100644 DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac create mode 100644 DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac rename Projects/SystemX.Core/{ => DB}/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj (97%) rename Projects/SystemX.Core/{ => DB}/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql (100%) rename Projects/SystemX.Core/{ => DB}/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql (100%) rename Projects/SystemX.Core/{ => DB}/SystemX.DB.AccountDB/dbo/Tables/tRole.sql (100%) rename Projects/SystemX.Core/{ => DB}/SystemX.DB.AccountDB/dbo/Tables/tUser.sql (100%) create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/SystemX.DB.UniqueKeyDB.sqlproj create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/dbo/Tables/tUniqueKeyStorage.sql create mode 100644 Projects/SystemX.Core/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql rename Projects/SystemX.Core/DBPatch/sqlScripts/{_UpdateAccountDB.bat => _UpdateScript.bat} (100%) create mode 100644 Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac create mode 100644 Tools/sqlpackage_install.bat diff --git a/DBPatch/DBPatch_AccountDB_Create.bat b/DBPatch/DBPatch_AccountDB_Create.bat new file mode 100644 index 0000000..1920ffc --- /dev/null +++ b/DBPatch/DBPatch_AccountDB_Create.bat @@ -0,0 +1,20 @@ +@echo off +CD ./sqlScripts/ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.AccountDB + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X +SET DBName=AccountDB + +::Default DB +@echo off +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV \ No newline at end of file diff --git a/DBPatch/DBPatch_AccountDB_Update.bat b/DBPatch/DBPatch_AccountDB_Update.bat new file mode 100644 index 0000000..ea04207 --- /dev/null +++ b/DBPatch/DBPatch_AccountDB_Update.bat @@ -0,0 +1,23 @@ +@echo off +CD .\sqlScripts\ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.AccountDB + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X +SET DBName=AccountDB + +@echo off +::generate update script +CALL _UpdateScriptGenerate.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% + +::Default DB +::CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% +::CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV \ No newline at end of file diff --git a/DBPatch/DBPatch_UniqueKeyDB_Create.bat b/DBPatch/DBPatch_UniqueKeyDB_Create.bat new file mode 100644 index 0000000..73d6cdc --- /dev/null +++ b/DBPatch/DBPatch_UniqueKeyDB_Create.bat @@ -0,0 +1,20 @@ +@echo off +CD ./sqlScripts/ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.UniqueKeyDB + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X +SET DBName=UniqueKeyDB + +::Default DB +@echo off +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV \ No newline at end of file diff --git a/DBPatch/DBPatch_UniqueKeyDB_Update.bat b/DBPatch/DBPatch_UniqueKeyDB_Update.bat new file mode 100644 index 0000000..5166c86 --- /dev/null +++ b/DBPatch/DBPatch_UniqueKeyDB_Update.bat @@ -0,0 +1,23 @@ +@echo off +CD .\sqlScripts\ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.UniqueKeyDB + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X +SET DBName=UniqueKeyDB + +@echo off +::generate update script +CALL _UpdateScriptGenerate.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% + +::Default DB +::CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% +CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV \ No newline at end of file diff --git a/Projects/Tools/Tools_Scaffold_AccountDB.bat b/DBPatch/Tool_AccountDB_Scaffold.bat similarity index 100% rename from Projects/Tools/Tools_Scaffold_AccountDB.bat rename to DBPatch/Tool_AccountDB_Scaffold.bat diff --git a/DBPatch/sqlScripts/SystemX.DB.AccountDB_Create.sql b/DBPatch/sqlScripts/SystemX.DB.AccountDB_Create.sql new file mode 100644 index 0000000..72848a5 --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.AccountDB_Create.sql @@ -0,0 +1,346 @@ +/* +SystemX.DB.AccountDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "SystemX.DB.AccountDB" +:setvar DefaultFilePrefix "SystemX.DB.AccountDB" +:setvar DefaultDataPath "" +:setvar DefaultLogPath "" +*/ + +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 [master]; + + +GO + +IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) +BEGIN + ALTER DATABASE [$(DatabaseName)] + SET SINGLE_USER WITH ROLLBACK IMMEDIATE; + DROP DATABASE [$(DatabaseName)]; +END + +GO +PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...' +GO +CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS +GO +USE [$(DatabaseName)]; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ANSI_NULLS ON, + ANSI_PADDING ON, + ANSI_WARNINGS ON, + ARITHABORT ON, + CONCAT_NULL_YIELDS_NULL ON, + NUMERIC_ROUNDABORT OFF, + QUOTED_IDENTIFIER ON, + ANSI_NULL_DEFAULT ON, + CURSOR_DEFAULT LOCAL, + RECOVERY FULL, + CURSOR_CLOSE_ON_COMMIT OFF, + AUTO_CREATE_STATISTICS ON, + AUTO_SHRINK OFF, + AUTO_UPDATE_STATISTICS ON, + RECURSIVE_TRIGGERS OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ALLOW_SNAPSHOT_ISOLATION OFF; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET READ_COMMITTED_SNAPSHOT OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_UPDATE_STATISTICS_ASYNC OFF, + PAGE_VERIFY NONE, + DATE_CORRELATION_OPTIMIZATION OFF, + DISABLE_BROKER, + PARAMETERIZATION SIMPLE, + SUPPLEMENTAL_LOGGING OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET TRUSTWORTHY OFF, + DB_CHAINING OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET HONOR_BROKER_PRIORITY OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET TARGET_RECOVERY_TIME = 0 SECONDS + WITH ROLLBACK IMMEDIATE; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF), + CONTAINMENT = NONE + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF), + MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF, + DELAYED_DURABILITY = DISABLED + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100) + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE = OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET TEMPORAL_HISTORY_RETENTION ON + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 + EXECUTE sp_fulltext_database 'enable'; + + +GO +PRINT N'테이블 [dbo].[tRefreshToken]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tRefreshToken] ( + [cAuid] NVARCHAR (250) NOT NULL, + [cRefreshToken] NVARCHAR (1000) NOT NULL, + PRIMARY KEY CLUSTERED ([cAuid] ASC) +); + + +GO +PRINT N'테이블 [dbo].[tRole]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tRole] ( + [cAuid] NVARCHAR (250) NOT NULL, + [cRoleID] TINYINT NOT NULL, + [cRoleName] NVARCHAR (20) NOT NULL, + PRIMARY KEY CLUSTERED ([cAuid] ASC) +); + + +GO +PRINT N'테이블 [dbo].[tUser]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tUser] ( + [cUserID] NVARCHAR (50) NOT NULL, + [cAuid] NVARCHAR (250) NOT NULL, + [cPasswordHashed] NVARCHAR (250) NOT NULL, + [cState] TINYINT NOT NULL, + [cCreateDateTime] DATETIME2 (7) NOT NULL, + [cLastLoginDateTime] DATETIME2 (7) NULL, + PRIMARY KEY CLUSTERED ([cUserID] ASC) +); + + +GO +/* +배포 후 스크립트 템플릿 +-------------------------------------------------------------------------------------- + 이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다. + SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다. + 예: :r .\myfile.sql + SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다. + 예: :setvar TableName MyTable + SELECT * FROM [$(TableName)] +-------------------------------------------------------------------------------------- +*/ + +IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'Alis') +BEGIN + INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime) + VALUES ('Alis', 'SuperUserAlis' ,'oKLQCdunc2kT5aAVfK+POKwd8R3p8OZvs/NATwpg4gM=' ,1 ,GETDATE(), GETDATE()); + + INSERT INTO tRole(cAuid, cRoleID, cRoleName) + VALUES ('SuperUserAlis','20','SuperUser'); +END + +IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'SystemX') +BEGIN + INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime) + VALUES ('SystemX', 'SuperUserSystemX' ,'S2irOEf+2n1sYsH7y+6/o16rc1HtXnj03a3qXfZLgBU=' ,1 ,GETDATE(), GETDATE()); + + INSERT INTO tRole(cAuid, cRoleID, cRoleName) + VALUES ('SuperUserSystemX','20','SuperUser'); +END +GO + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/SystemX.DB.AccountDB_Update.sql b/DBPatch/sqlScripts/SystemX.DB.AccountDB_Update.sql new file mode 100644 index 0000000..fc0376e --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.AccountDB_Update.sql @@ -0,0 +1,89 @@ +/* +AccountDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +이 파일을 변경하면 잘못된 동작이 발생할 수 있으며 코드가 다시 생성되면 +이러한 변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "AccountDB" +:setvar DefaultFilePrefix "AccountDB" +:setvar DefaultDataPath "D:\20_MSSQL\DATA\" +:setvar DefaultLogPath "D:\20_MSSQL\DATA\" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드를 검색하고 SQLCMD 모드가 지원되지 않는 경우 스크립트 실행을 사용하지 않도록 설정합니다. +SQLCMD 모드를 사용하도록 설정한 후 스크립트를 다시 사용하도록 설정하려면 다음을 실행합니다. +NOEXEC를 끕니다. +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [$(DatabaseName)]; + + +GO +PRINT N'테이블 [dbo].[tUser]을(를) 변경하는 중...'; + + +GO +ALTER TABLE [dbo].[tUser] + ADD [cUpdateTest] NCHAR (10) NULL; + + +GO +/* +배포 후 스크립트 템플릿 +-------------------------------------------------------------------------------------- + 이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다. + SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다. + 예: :r .\myfile.sql + SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다. + 예: :setvar TableName MyTable + SELECT * FROM [$(TableName)] +-------------------------------------------------------------------------------------- +*/ + +IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'Alis') +BEGIN + INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime) + VALUES ('Alis', 'SuperUserAlis' ,'oKLQCdunc2kT5aAVfK+POKwd8R3p8OZvs/NATwpg4gM=' ,1 ,GETDATE(), GETDATE()); + + INSERT INTO tRole(cAuid, cRoleID, cRoleName) + VALUES ('SuperUserAlis','20','SuperUser'); +END + +IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'SystemX') +BEGIN + INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime) + VALUES ('SystemX', 'SuperUserSystemX' ,'S2irOEf+2n1sYsH7y+6/o16rc1HtXnj03a3qXfZLgBU=' ,1 ,GETDATE(), GETDATE()); + + INSERT INTO tRole(cAuid, cRoleID, cRoleName) + VALUES ('SuperUserSystemX','20','SuperUser'); +END +GO + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql b/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql new file mode 100644 index 0000000..433374e --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql @@ -0,0 +1,290 @@ +/* +SystemX.DB.UniqueKeyDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "SystemX.DB.UniqueKeyDB" +:setvar DefaultFilePrefix "SystemX.DB.UniqueKeyDB" +:setvar DefaultDataPath "" +:setvar DefaultLogPath "" +*/ + +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 [master]; + + +GO + +IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) +BEGIN + ALTER DATABASE [$(DatabaseName)] + SET SINGLE_USER WITH ROLLBACK IMMEDIATE; + DROP DATABASE [$(DatabaseName)]; +END + +GO +PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...' +GO +CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS +GO +USE [$(DatabaseName)]; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ANSI_NULLS ON, + ANSI_PADDING ON, + ANSI_WARNINGS ON, + ARITHABORT ON, + CONCAT_NULL_YIELDS_NULL ON, + NUMERIC_ROUNDABORT OFF, + QUOTED_IDENTIFIER ON, + ANSI_NULL_DEFAULT ON, + CURSOR_DEFAULT LOCAL, + RECOVERY FULL, + CURSOR_CLOSE_ON_COMMIT OFF, + AUTO_CREATE_STATISTICS ON, + AUTO_SHRINK OFF, + AUTO_UPDATE_STATISTICS ON, + RECURSIVE_TRIGGERS OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ALLOW_SNAPSHOT_ISOLATION OFF; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET READ_COMMITTED_SNAPSHOT OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_UPDATE_STATISTICS_ASYNC OFF, + PAGE_VERIFY NONE, + DATE_CORRELATION_OPTIMIZATION OFF, + DISABLE_BROKER, + PARAMETERIZATION SIMPLE, + SUPPLEMENTAL_LOGGING OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET TRUSTWORTHY OFF, + DB_CHAINING OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET HONOR_BROKER_PRIORITY OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET TARGET_RECOVERY_TIME = 0 SECONDS + WITH ROLLBACK IMMEDIATE; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF), + CONTAINMENT = NONE + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF), + MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF, + DELAYED_DURABILITY = DISABLED + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100) + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE = OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET TEMPORAL_HISTORY_RETENTION ON + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 + EXECUTE sp_fulltext_database 'enable'; + + +GO +PRINT N'테이블 [dbo].[tUniqueKeyStorage]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tUniqueKeyStorage] ( + [cIdentity] NVARCHAR (200) NOT NULL, + [cDateTime] DATETIME2 (7) NOT NULL, + [cData1] NVARCHAR (4000) NULL, + [cData2] NVARCHAR (4000) NULL, + [cData3] NVARCHAR (4000) NULL, + [cData4] NVARCHAR (4000) NULL, + [cData5] NVARCHAR (4000) NULL, + PRIMARY KEY CLUSTERED ([cIdentity] ASC) +); + + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Update.sql b/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Update.sql new file mode 100644 index 0000000..d09a6e2 --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Update.sql @@ -0,0 +1,57 @@ +/* +UniqueKeyDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +이 파일을 변경하면 잘못된 동작이 발생할 수 있으며 코드가 다시 생성되면 +이러한 변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "UniqueKeyDB" +:setvar DefaultFilePrefix "UniqueKeyDB" +:setvar DefaultDataPath "D:\20_MSSQL\DATA\" +:setvar DefaultLogPath "D:\20_MSSQL\DATA\" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드를 검색하고 SQLCMD 모드가 지원되지 않는 경우 스크립트 실행을 사용하지 않도록 설정합니다. +SQLCMD 모드를 사용하도록 설정한 후 스크립트를 다시 사용하도록 설정하려면 다음을 실행합니다. +NOEXEC를 끕니다. +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [$(DatabaseName)]; + + +GO +PRINT N'테이블 [dbo].[tUniqueKeyStorage]을(를) 변경하는 중...'; + + +GO +ALTER TABLE [dbo].[tUniqueKeyStorage] + ADD [cData6] NCHAR (10) NULL; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/_CreateDB.bat b/DBPatch/sqlScripts/_CreateDB.bat new file mode 100644 index 0000000..5b66947 --- /dev/null +++ b/DBPatch/sqlScripts/_CreateDB.bat @@ -0,0 +1,19 @@ +@echo off + +SET Schema=%1 +SET ServerIP=%2 +SET ServerPort=%3 +SET UserID=%4 +SET Passwd=%5 +SET DBName=%6 + +SET SqlCmdOption=-C -U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -f 65001 -o .\logs\%DBName%.log +SET DatabaseName=%DBName% +sqlcmd %SqlCmdOption% -i .\%Schema%_Create.sql +if errorlevel 1 goto errexit +goto end +:errexit +echo DB Patch Fail +goto end +:end +@echo on \ No newline at end of file diff --git a/DBPatch/sqlScripts/_UpdateDB.bat b/DBPatch/sqlScripts/_UpdateDB.bat new file mode 100644 index 0000000..c070cdc --- /dev/null +++ b/DBPatch/sqlScripts/_UpdateDB.bat @@ -0,0 +1,20 @@ +@echo off + +SET Schema=%1 +SET ServerIP=%2 +SET ServerPort=%3 +SET UserID=%4 +SET Passwd=%5 +SET DBName=%6 + +SET SqlCmdOption=-U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -d %DBName% -o .\logs\%DBName%.log +SET DatabaseName=%DBName% +sqlcmd %SqlCmdOption% -i .\%Schema%_Update.sql + +if errorlevel 1 goto errexit +goto end +:errexit +echo DB Patch Fail +goto end +:end +@echo on \ No newline at end of file diff --git a/DBPatch/sqlScripts/_UpdateScriptGenerate.bat b/DBPatch/sqlScripts/_UpdateScriptGenerate.bat new file mode 100644 index 0000000..c899e38 --- /dev/null +++ b/DBPatch/sqlScripts/_UpdateScriptGenerate.bat @@ -0,0 +1,11 @@ +@echo off + +SET Schema=%1 +SET ServerIP=%2 +SET ServerPort=%3 +SET UserID=%4 +SET Passwd=%5 +SET DBName=%6 + +::create update sql file +sqlpackage /Action:Script /SourceFile:./dacpac/%Schema%.dacpac /TargetConnectionString:"server=%ServerIP%,%ServerPort%; user id=%UserID%; password=%Passwd%; database=%DBName%; TrustServerCertificate=true" /OutputPath:"./%Schema%_Update.sql" /p:CommentOutSetVarDeclarations=True \ No newline at end of file diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac new file mode 100644 index 0000000000000000000000000000000000000000..8681144aab2a7ae4b33e35908f911bff17931d3b GIT binary patch literal 3502 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 VFE-~nKtI!fth2;=)j5Cu{sm-JYk~j( literal 0 HcmV?d00001 diff --git a/Projects/DLL/SystemX.Core.DB.dll b/Projects/DLL/SystemX.Core.DB.dll index 91681c171d4c98ec29c7817d9553daddad52d788..5cb286e899683e93f10ebca7a5592265aac74550 100644 GIT binary patch delta 235 zcmZqhY4DlQ!LnTSRo}**8cBh#<(9$UY^J&|pS`Sa=Wct~%@R^t%o<5amZ>QwhQ^8J zCMhY27AA&fX{KgoCW*#rX~qV|mPtlN21zD{76y~EWX)Lqp82+T@)Fqq0rR7UFZSD*kDd<+u=spgmADL$X1Hi6^i!&RH7$aS#zCov>3STdwCq%fE; z7%~_$Br=!-St&r6$Y22$Gh;|&Fl8_ULKC2vF_4!ABn^Pr5~$Y*2n~QVNVf%p!RBn` GsZ0QH5J!su delta 235 zcmZqhY4DlQ!P0xT;lak98cBgk`AQ2{mrZe7Wqm&RpSyb3W(g@RW{qUCv}99bBa4)@ zR11?7BU8gsy04kcVWXiy&&c?zjdjbr^t1%_$M=%F{CjhGng_M zGZ-;gFr)x^sX*EU$T9+o8Up1&;wC^c1*pb?Aql9%5XdtI(&j*H1{6yMikLH4GFWWR IR-VcP0C_G)lmGw# diff --git a/Projects/DLL/SystemX.Core.dll b/Projects/DLL/SystemX.Core.dll index 25f7c979b977e125439e58754fd2c9bb6fe684a6..10884ee0232f87f74e35f8964f7d135ee1358c55 100644 GIT binary patch delta 238 zcmZqZVQ%PQp3uQEO)7Q6#-5Os0vG^x3Br#Yrq%x#1 zm@pVJ7&9a?m;+fUK$ys20Twf3NMkT%FatsppqMd`mj)yafY=hK*9Zs=fHX+A1%tun I@WU&a0P0>#FaQ7m delta 238 zcmZqZVQ%PQp3uQEr|RpkjXfbN1(x&+{8uPTO^qo8X23Jo0(Z88=6~MZ0_A<%*^8B!n9-Zk-Y%||ATo- zbgxP}ZQpiMw{S`Sp~))yvJ{|#lVE}%)d5!zDD8|3PL*;?`LTK3z9<&|WCk;aG=^jb zQwC!OBL)kG6d*4ZNSgpzMnF+Rpd3it1W2X;)mShj0d*JxdB#B69Ei<;V#z=ea|TNW Li_PJOS26(r1};l` diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj similarity index 97% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj index d94a9b7..de6e417 100644 --- a/Projects/SystemX.Core/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj +++ b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj @@ -73,8 +73,8 @@ - xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)DBPatch\sqlScripts\ + xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\ -xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)DBPatch\sqlScripts\dacpac\ +xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)..\..\DBPatch\sqlScripts\dacpac\ \ No newline at end of file diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql similarity index 100% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql similarity index 100% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tRole.sql b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tRole.sql similarity index 100% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tRole.sql rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tRole.sql diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tUser.sql b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tUser.sql similarity index 100% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tUser.sql rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tUser.sql diff --git a/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/SystemX.DB.UniqueKeyDB.sqlproj b/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/SystemX.DB.UniqueKeyDB.sqlproj new file mode 100644 index 0000000..8e11099 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/SystemX.DB.UniqueKeyDB.sqlproj @@ -0,0 +1,75 @@ + + + + Debug + AnyCPU + SystemX.DB.UniqueKeyDB + 2.0 + 4.1 + {c67f3f97-1d52-4c75-a04f-16ed41822ccd} + Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider + Database + + + SystemX.DB.UniqueKeyDB + SystemX.DB.UniqueKeyDB + 1042,CI + BySchemaAndSchemaType + True + v4.7.2 + CS + Properties + False + True + True + True + Korean_Wansung_CI_AS + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + true + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + + + + + + + + xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\ + +xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)..\..\DBPatch\sqlScripts\dacpac\ + + \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/dbo/Tables/tUniqueKeyStorage.sql b/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/dbo/Tables/tUniqueKeyStorage.sql new file mode 100644 index 0000000..6dd0daa --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/dbo/Tables/tUniqueKeyStorage.sql @@ -0,0 +1,10 @@ +CREATE TABLE [dbo].[tUniqueKeyStorage] +( + [cIdentity] NVARCHAR(200) NOT NULL PRIMARY KEY, + [cDateTime] DATETIME2 NOT NULL, + [cData1] NVARCHAR(4000), + [cData2] NVARCHAR(4000), + [cData3] NVARCHAR(4000), + [cData4] NVARCHAR(4000), + [cData5] NVARCHAR(4000), +) diff --git a/Projects/SystemX.Core/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql b/Projects/SystemX.Core/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql new file mode 100644 index 0000000..433374e --- /dev/null +++ b/Projects/SystemX.Core/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql @@ -0,0 +1,290 @@ +/* +SystemX.DB.UniqueKeyDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "SystemX.DB.UniqueKeyDB" +:setvar DefaultFilePrefix "SystemX.DB.UniqueKeyDB" +:setvar DefaultDataPath "" +:setvar DefaultLogPath "" +*/ + +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 [master]; + + +GO + +IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) +BEGIN + ALTER DATABASE [$(DatabaseName)] + SET SINGLE_USER WITH ROLLBACK IMMEDIATE; + DROP DATABASE [$(DatabaseName)]; +END + +GO +PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...' +GO +CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS +GO +USE [$(DatabaseName)]; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ANSI_NULLS ON, + ANSI_PADDING ON, + ANSI_WARNINGS ON, + ARITHABORT ON, + CONCAT_NULL_YIELDS_NULL ON, + NUMERIC_ROUNDABORT OFF, + QUOTED_IDENTIFIER ON, + ANSI_NULL_DEFAULT ON, + CURSOR_DEFAULT LOCAL, + RECOVERY FULL, + CURSOR_CLOSE_ON_COMMIT OFF, + AUTO_CREATE_STATISTICS ON, + AUTO_SHRINK OFF, + AUTO_UPDATE_STATISTICS ON, + RECURSIVE_TRIGGERS OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ALLOW_SNAPSHOT_ISOLATION OFF; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET READ_COMMITTED_SNAPSHOT OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_UPDATE_STATISTICS_ASYNC OFF, + PAGE_VERIFY NONE, + DATE_CORRELATION_OPTIMIZATION OFF, + DISABLE_BROKER, + PARAMETERIZATION SIMPLE, + SUPPLEMENTAL_LOGGING OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET TRUSTWORTHY OFF, + DB_CHAINING OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET HONOR_BROKER_PRIORITY OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET TARGET_RECOVERY_TIME = 0 SECONDS + WITH ROLLBACK IMMEDIATE; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF), + CONTAINMENT = NONE + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF), + MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF, + DELAYED_DURABILITY = DISABLED + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100) + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE = OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET TEMPORAL_HISTORY_RETENTION ON + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 + EXECUTE sp_fulltext_database 'enable'; + + +GO +PRINT N'테이블 [dbo].[tUniqueKeyStorage]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tUniqueKeyStorage] ( + [cIdentity] NVARCHAR (200) NOT NULL, + [cDateTime] DATETIME2 (7) NOT NULL, + [cData1] NVARCHAR (4000) NULL, + [cData2] NVARCHAR (4000) NULL, + [cData3] NVARCHAR (4000) NULL, + [cData4] NVARCHAR (4000) NULL, + [cData5] NVARCHAR (4000) NULL, + PRIMARY KEY CLUSTERED ([cIdentity] ASC) +); + + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/Projects/SystemX.Core/DBPatch/sqlScripts/_UpdateAccountDB.bat b/Projects/SystemX.Core/DBPatch/sqlScripts/_UpdateScript.bat similarity index 100% rename from Projects/SystemX.Core/DBPatch/sqlScripts/_UpdateAccountDB.bat rename to Projects/SystemX.Core/DBPatch/sqlScripts/_UpdateScript.bat diff --git a/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac b/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac index 109f752f40377918a0d533e351599218bc650cfe..aadc5aac09c477934f43ac55dfb3ea7a2b6a6d7e 100644 GIT binary patch delta 1766 zcmY*ac{tPw7#@ml#;U)LJ=*+~!Ca!sJ-(AKT-5p7(ja=l$OI`|JCjw_c`J24Zh>%L4*65h0(rfZeWX)~IB7F_qpeD-3H$b4 zyDJu^jvc>ypXUp2{`HggNYE+4?Bcb0t<)HxFdiehjw^o)#8(alzCR%dPtZe`go9kwp`3WYJe#alfppV))KN_>EFrqU_?c!Qc#}9MT&kTbS*%c=DhY0s zPWWfFb_T&Ifzyu!m8`tOv|sPE$hTv@SoWK~DT=OEQ`YseRH)EzmcN#iz=%*-Gz&Et z4^mXFmIa27nNGIrSp;YK&rb62ESzEA#n4N$n{CYF#H78GK9u0E3coU)R@5GPfTGPo znR|Y^89D|edN8ixiTH5>9Vup%X0Mx~w#HL2c~@ggja#Zo+F>5qE`N`epCv}faBOB;b#hUlA1Y4}M$yX1H5T!F=c#R1@N%OQ`)P|cq{tY6qxIsp zfpZh?LbIHD2v>r%!jkd?`6T!P%a^_LWr$HMP$EdJOmGl#?IP)n=po<-77rM{X=!O@;`IK!xns=w z)HyFn9bsqI#Xgr^ba-!w+2AZW+G&bF; z7DOGZ7+W8XT2k47AVp1!(hRQ`8=OZ^vWw3B8M~7%=gI8jbP;BrSq09Sj^6@H@Swk@ z(ing9f9_u2ZHly7BF#lly70cQ>NN7dU&vLq6hCD4TBp)c)d88GCS8?p4V()YOGvP< z_s+qm0V-qJAYldJ%LBR|uroKsqLiXv<;`>w7HmD*p{pCescm?S+&@R=;lx0tuSS-y z4db&5C2XEqxruhjJoxZS*0_JKCGA2Jad(?1cOQlV-{*k${ax%F@J*3XHTwfyR ziyMsa01{kUMj^eL=cw5 z-fk~dxxeHcD`nTYk0lFrx=Z%U7oQ%;2#%{b%?aiYQ)p_JeSCq!*M+S_Jd6Qa!)_b4 zPn7#tFQ2l0l6;lU3U4%Z>ZASgv4ytMcsBE`}tVj+o|x0 zO-u&qNV&z(#||GdPpxK-if$FWO?}wFOrL@QQb~e~7oS}FfSlKaxGpI2v9D|Mdl~h% z^WAwA!-bK92TS?t?kQMoiw+oS7TPMXT{x31xzWp8)#Y!HE!(&96nPax*!iFiw8Ad< z@JZqG1s1@EVga8fsP6uqNnCsXha)!#lztEvLI?5jqp}W|U^FJo_jYg~`kn?RB+%Z5 ziyH>|5i;U9_s;4A!(Rsw{$V`m)bPS!S-JmD_h7%rQ4r|(A&m^)7A*Cj#(2icy69jw TdjPRRnk0N87|MHB@H_c0gz77) delta 1745 zcmY*ac`)0FAN@um5@#)zph7FHqmH(Y2Ro1a?TkW2~*f+AJN7LBVxOY0VOR2M&;-^{Pm&&+4$&71fBdv9KuOqGnJEfx$B2LJ#D)W+_) zB`S#^EqMW;u3C}6vw2MHY)wN9OVh)pPM9K;_rWCCtnBIQ;sP*~rfvgc98!9PP*dw# zzbh*8PD$&;+Pw2Cb z-(s-xjT(JZsY85+2;=_Fn38~J=Y$!Upu0UDb&5q|-8d*H?eZDShj-Tgr_l2kru<;| zm$hy-351^uL>hnV)EI<2iz3}I<*a5}cZ5aj(;}a@F$xLPwT=6V68t5T2{~eYn+`4H zzn(-~N5V+q0*kU8h6QAzq&T(mRl~qjq6t?W0kZb*62C&Q)-fF6k4qkM5UIFBp_P55 zv9-oFo)orR9lO#2j8NU|IV5=s+WNW2Zd_s)yz}a9fqeCKMCtuOxbMy>6hYt=^A;p%ev+vvFmj$uKFT-fPDSSU`vyUd~lL( zCR8C-+)ySLhY)v?)p?!vWtrvW;l!!lM3Kz)SNb0(b4EEoKdQitLobcYXL*nMrSnoH ziS_h5qYRX7MM%n?MCuH+w-USH%wJwLcB?;R9%J@42-kXk@AifU#%6qUJJ(CK@>IR7 z_t*6PLI^uo7E19zuXC<=ZQLa^q(}T+?<^-Z8N19G<)T*%(kH0~ zh~qB!CtP^az&u#-oj$86i=ACoIh$r~fl6LWdORh9Ttc)(f{#!t%VBaOM<+ox#x+6j z?@GBoOjWmAVx%1E7gV`V<@-L&pbgEi)i+Ox$`t-&6EaR=b`?hvlG)1eVNaObl`d3M|9wbkWz(2vEf z&E?JDfqbhlMHjXP{{{#O@59bf)ZrINtUqa*;?vGcM)LJ1tIkWALXx=hct@Py6N?sI z&kIg~U$Fha=kex`XSXE-f1=~kT^(f^hGwZ8goPXB%5kGl5Kcu=s zTw;Ca+4S;6!ph{zL5q(mi`ci@S}RDme|GR>I}8+~lIMa=pXB2CQGu%&1-wh7COfO_ zdU^rso=@68@g&AX3IH*L$k*VUS(bAC;dJ7Te0QqFKo%wrH@EC+ztD2i1y1Ghj#k6q z!WrDm!jx=BnUVk}dnPTWv`KWg7*)9XHrVSc(=T@`FMx$7{>?@-S8&t>^>yazd~@X- zuHN|UcGcH!MrILkhM+jjB(=UacJB3@A*8Bl*LIMTmjlGi5smJQ6HDnN_~VN0%^&pC z+1S|<;Z&C2#o{-J`!M|!w9?z~S)OizyhhRZXu&={DGhnq%ffM|Rn|*XslD6h`42Ry znx^bWnv2EzcoAV=!WIs(a))4|)gNWxewtuD+7bMiCKIHkxZOz_K9UKV)@{x_x9U=f z($*G<8s6ZF5vLQt%OgDd+7%Y7;S%w07(G4h_cWeb*-K4$6FAh;BgBxDq3Wx{-HE|- z-tAkB8jIOwc`o6$QTj&l%AQfF26e`&Dr1cc3KIy|PTYewrKvgG35s^VVGX|%dazAf zxG%6S?%GGS%nk!+kD{XHJIJK(i!OhOR8%6*mP^k};a}Lb_n~x5P;R7gXiki3*cLYC z3#~UA{9~{v6oCbyAEtp4FQ|h2#ysE-RpNO7AnAB8gpViW`;jSwf+zo%#tlJf&{>Lr zkeu`XGkI)rhX4Tocl|L!zyZMKR)AkXsQSH-U|TGRM-BMCOGa}Rmb7El{PBzZ;7g#y M2%Uk334SC03!}Xz2LJ#7 diff --git a/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac b/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac new file mode 100644 index 0000000000000000000000000000000000000000..46822c4d4daef4ee9f9808b8a14ea3f047966078 GIT binary patch literal 2615 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 W)fY=MHqehWAoHv;UuE_mzkdUti)&B- literal 0 HcmV?d00001 diff --git a/Projects/SystemX.Core/SystemX.Core.sln b/Projects/SystemX.Core/SystemX.Core.sln index 96344c5..de82dab 100644 --- a/Projects/SystemX.Core/SystemX.Core.sln +++ b/Projects/SystemX.Core/SystemX.Core.sln @@ -5,10 +5,14 @@ VisualStudioVersion = 17.9.34728.123 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SystemX.Core", "SystemX.Core\SystemX.Core.csproj", "{F057A1E8-F5FF-4241-BEEA-1A57E971F379}" EndProject -Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.AccountDB", "SystemX.DB.AccountDB\SystemX.DB.AccountDB.sqlproj", "{B44C85FA-BD31-419F-8481-477E166A5753}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemX.Core.DB", "SystemX.Core.DB\SystemX.Core.DB.csproj", "{78647721-F9BD-4876-89D5-95A2A0F3ADA7}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DB", "DB", "{C8D5274F-AC00-46C7-1F8D-E88E81087A52}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.AccountDB", "DB\SystemX.DB.AccountDB\SystemX.DB.AccountDB.sqlproj", "{B44C85FA-BD31-419F-8481-477E166A5753}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.UniqueKeyDB", "DB\SystemX.DB.UniqueKeyDB\SystemX.DB.UniqueKeyDB.sqlproj", "{C67F3F97-1D52-4C75-A04F-16ED41822CCD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -19,20 +23,30 @@ Global {F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Debug|Any CPU.Build.0 = Debug|Any CPU {F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Release|Any CPU.ActiveCfg = Release|Any CPU {F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Release|Any CPU.Build.0 = Release|Any CPU + {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Release|Any CPU.Build.0 = Release|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.Build.0 = Debug|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.ActiveCfg = Release|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.Build.0 = Release|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.Deploy.0 = Release|Any CPU - {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Release|Any CPU.Build.0 = Release|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.Build.0 = Release|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {B44C85FA-BD31-419F-8481-477E166A5753} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} + {C67F3F97-1D52-4C75-A04F-16ED41822CCD} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A26A3BD0-2161-41FA-949A-DEA966E8F798} EndGlobalSection diff --git a/Tools/sqlpackage_install.bat b/Tools/sqlpackage_install.bat new file mode 100644 index 0000000..a4a03e6 --- /dev/null +++ b/Tools/sqlpackage_install.bat @@ -0,0 +1,3 @@ +dotnet tool install -g microsoft.sqlpackage + +pause \ No newline at end of file