/****** Object:  Table [dbo].[Auth_Role_Page]    Script Date: 10/23/2014 16:55:25 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Auth_Role_Page](
[role_page_idx] [int] NOT NULL,
[com_code] [nvarchar](5) NULL,--회사코드
[role_id] [nvarchar](20) NULL,--권한수준
[page_id] [varchar](8) NULL,--메뉴번호
[reg_date] [datetime] NULL,
[reg_userid] [nvarchar](20) NULL,
[pop] [char](1) NULL,
[seq] [int] NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO



이런 구조의 테이블이 있습니다.

뭔가 제약 조건이 걸리긴 했는데 내용을 보니 그냥 날자를 reg_date 에 넣는것 뿐이였고

의미 없는 role_page_idx 에만 키값이 걸려있고 아무것도 안되있더군요;;

그렇다보니 아래처럼 입력할경우 중복처리가 안되버립니다.

테이블 세팅 자체에서 그룹키(?)같은게 지정되있어서 중복 안되게끔 해야하는데 

Role_Id ,Page_Id , com_code  세개 합쳐서 중복이 안되게끔..

테이블 열을 바꿀수는 없고

그룹키 지정같은걸 해야하는데 방법을 모르겠구

IF OBJECT_ID('tempdb..#tblComCode') IS NOT NULL -- 임시테이블이 있을 경우
       DROP TABLE #tblComCode                          -- 임시테이블 삭제       
CREATE TABLE #tblComCode
( com_code NVARCHAR(5))
GO
IF OBJECT_ID('tempdb..#tblRoleId') IS NOT NULL -- 임시테이블이 있을 경우
       DROP TABLE #tblRoleId                          -- 임시테이블 삭제
CREATE TABLE #tblRoleId
(Role_Id NVARCHAR(20))
GO
IF OBJECT_ID('tempdb..#tblPageId') IS NOT NULL -- 임시테이블이 있을 경우
       DROP TABLE #tblPageId                          -- 임시테이블 삭제
CREATE TABLE #tblPageId
(Page_Id NVARCHAR(4))
GO
IF OBJECT_ID('tempdb..#Auth_Role_Page') IS NOT NULL -- 임시테이블이 있을 경우

       DROP TABLE #Auth_Role_Page                          -- 임시테이블 삭제
CREATE TABLE #Auth_Role_Page
(
com_code NVARCHAR(5),
role_id NVARCHAR(20),
page_id NVARCHAR(4)
)
GO
-- 사업장 설정
INSERT INTO #tblComCode
        ( com_code )
VALUES  
( N'C001' ),--
( N'C002' ),--
( N'C003' ),--
--( N'C004' ),--
--( N'C005' ),
( N'C006' ),--
--( N'C007' ),
--( N'C008' ),
( N'C009' )--
--( N'C010' )--
GO
-- 권한 설정
INSERT INTO #tblRoleId
        ( Role_Id )
VALUES  ( N'admin' ),
   ( N'root' ),
   ( N'user' )
GO
-- 권한 설정할 메뉴
INSERT INTO #tblPageId
        ( Page_Id )
VALUES  
( N'B569' ),
( N'B896' ),
( N'B897' ),
( N'B898' ),
( N'B899' ),
( N'B865' ),
( N'B861' ),
( N'B900' )
GO

--SELECT A.com_code,B.Role_Id,C.Page_Id 
--FROM #tblComCode A
--CROSS APPLY #tblRoleId B
--CROSS APPLY #tblPageId C
--ORDER BY A.com_code,B.Role_Id,C.Page_Id

INSERT INTO Auth_Role_Page
        ( com_code, role_id, page_id )
SELECT A.com_code,B.Role_Id,C.Page_Id 
FROM #tblComCode A
CROSS APPLY #tblRoleId B
CROSS APPLY #tblPageId C
ORDER BY A.com_code,B.Role_Id,C.Page_Id

SELECT * FROM Auth_Role_Page

DROP TABLE #Auth_Role_Page 
DROP TABLE #tblPageId 
DROP TABLE #tblRoleId                          -- 임시테이블 삭제
DROP TABLE #tblComCode                          -- 임시테이블 삭제       


이미 중복된 데이터도 들어가 버렸다는것도 문제인데 중복된걸 삭제할 방법을 모르겠고


[한열만 중복된 데이터 말고 3개열을 합쳐서 비교해야하는데 그런 예제를 못찿겠고]


아무튼 많이 골치 아픈 상황이네요


중복되지 않게 넣는법과


이미 중복해서 들어간 데이터 삭제하는 법좀 알려주세요

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 1159
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 1672
8316 SQL 서버와 Active Directory에 대해서 [2] Larry 2014.10.29 2433
8315 인덱스 리빌드 관련 문의 드려요- [1] 수노 2014.10.29 3106
8314 오라클 참조외래키 문의드립니다. 톡히슈터 2014.10.28 5885
8313 통계시 없는데이터 채우기 [5] 버즈베잇 2014.10.28 6529
8312 행을 열로 변환하는 쿼리 부탁드려요!!!!! [2] 진아현명 2014.10.27 2714
8311 2014 ex 에이전트 시작 문제 [3] park87 2014.10.27 2552
8310 서로다른 데이타베이스안에 공통인 테이블을 한번에 업데이트 할수 있나요? [4] 김영환_281520 2014.10.27 2615
8309 해킹 들어왔습니다.. [1] 돌브레인 2014.10.27 2738
8308 집계함수 SUM 처럼 곱셈처리 [2] 우영호수 2014.10.27 9614
8307 mdf ldf 파일로 다른 노트북에서 [1] 푸르른하늘 2014.10.26 2169
8306 트리거를 이용해서 로그 테이블에 데이터 삽입 [1] 푸르른하늘 2014.10.25 2065
8305 부분 조건 LEFT OUTER JOIN 출력 [3] park87 2014.10.24 3460
8304 그룹키 지정하는 방법, PK말구요.. [3] park87 2014.10.24 3269
8303 데이터를 편집창에 넣을때 자동으로 기호 붙이기 [5] park87 2014.10.24 2842
8302 열 '~~'이(가) 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. [1] park87 2014.10.24 8751
8301 테이블 내에서 여러열을 기준으로 중복된 행 제거 [1] park87 2014.10.23 3053
8300 명령어로 사용자 생성 방법 질문합니다. [2] sams 2014.10.23 3158
8299 시스템 운영 중 오류 덤프가 발생했습니다. 아직모자란사람 2014.10.23 2439
» 중복 데이터 제거 및 그룹 키((?)로 재설정하기 [1] park87 2014.10.23 3116
8297 MSSQL join할 때 문제가 있습니다. [4] 임쑤 2014.10.22 3198





XE Login