-- ========================================================== -- 양산형 테스트 기기 모니터링 시스템 MSSQL 2012 DB 구성 스크립트 -- 작성일: 2026-06-22 -- 호환 버전: Microsoft SQL Server 2012 이상 -- ========================================================== USE [master]; GO -- 데이터베이스 생성 (존재하지 않을 경우에만 생성) IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'MarkingDb') BEGIN CREATE DATABASE [MarkingDb]; END GO USE [MarkingDb]; GO -- ========================================== -- 1. [Users] 테이블 생성 (작업자 정보 및 비밀번호 관리) -- ========================================== IF OBJECT_ID(N'[dbo].[Users]', N'U') IS NULL BEGIN CREATE TABLE [dbo].[Users] ( [Id] INT IDENTITY(1,1) NOT NULL, [OperatorId] VARCHAR(50) NOT NULL, [Password] VARCHAR(50) NOT NULL, [Name] NVARCHAR(50) NULL, [IsActive] BIT DEFAULT 1 NOT NULL, CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [UQ_Users_OperatorId] UNIQUE ([OperatorId]) ); END GO -- 기본 테스트 계정 데이터 적재 IF NOT EXISTS (SELECT 1 FROM [dbo].[Users] WHERE [OperatorId] = 'test') BEGIN INSERT INTO [dbo].[Users] ([OperatorId], [Password], [Name], [IsActive]) VALUES ('test', 'test', '테스트작업자', 1); END GO IF NOT EXISTS (SELECT 1 FROM [dbo].[Users] WHERE [OperatorId] = 'admin') BEGIN INSERT INTO [dbo].[Users] ([OperatorId], [Password], [Name], [IsActive]) VALUES ('admin', 'admin', '시스템관리자', 1); END GO IF NOT EXISTS (SELECT 1 FROM [dbo].[Users] WHERE [OperatorId] = 'su') BEGIN INSERT INTO [dbo].[Users] ([OperatorId], [Password], [Name], [IsActive]) VALUES ('su', 'su', '최고권한자', 1); END GO -- ========================================== -- 2. [Marking] 테이블 생성 (성능 측정 결과 적재) -- ========================================== IF OBJECT_ID(N'[dbo].[Marking]', N'U') IS NULL BEGIN CREATE TABLE [dbo].[Marking] ( [IC_SN] VARCHAR(50) NOT NULL, [Marking_QR] NVARCHAR(100) NOT NULL, [Maker] NVARCHAR(10) NOT NULL, [Model] NVARCHAR(10) NOT NULL, [Variant_1] NVARCHAR(10) NOT NULL, [Variant_2] NVARCHAR(10) NOT NULL, [Operator] NVARCHAR(10) NOT NULL, [Production_Date] DATETIME2(0) NOT NULL, [Line] NVARCHAR(10) NOT NULL, [Lot_No] NVARCHAR(8) NOT NULL, [Jig_No] NVARCHAR(10) NOT NULL, [PT_Vol_1] DECIMAL(4, 2) NOT NULL, [PT_Current_1] DECIMAL(4, 2) NOT NULL, [PT_Resistance_1] DECIMAL(5, 3) NOT NULL, [Result] NVARCHAR(5) NOT NULL, [Spare_1] NVARCHAR(30) NULL, [Spare_2] NVARCHAR(30) NULL, [Spare_3] NVARCHAR(30) NULL, [Spare_4] NVARCHAR(30) NULL, CONSTRAINT [PK_Marking] PRIMARY KEY CLUSTERED ([IC_SN] ASC), CONSTRAINT [UQ_Marking_Marking_QR] UNIQUE ([Marking_QR]) ); -- 시리얼 번호(IC_SN) 조회용 인덱스는 클러스터드 기본키로 지정되었으므로 생략 또는 추가 필요 시 생성 END GO -- ========================================== -- 3. [CheckOperator] 로그인 검증용 저장 프로시저 생성 -- ========================================== IF OBJECT_ID(N'[dbo].[CheckOperator]', N'P') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[CheckOperator]; END GO CREATE PROCEDURE [dbo].[CheckOperator] @Operator VARCHAR(50), @Password VARCHAR(50), @ProcessName VARCHAR(50) = NULL AS BEGIN SET NOCOUNT ON; -- 대소문자 구분 없이 입력 ID와 비밀번호 매칭 여부를 카운트(0 또는 1)로 리턴 SELECT COUNT(*) FROM [dbo].[Users] WHERE UPPER([OperatorId]) = UPPER(@Operator) AND [Password] = @Password AND [IsActive] = 1; END; GO