[MSSQL] 존재하는 테이블에 다른 테이블 내용 복사하기
DB&XML 2009. 7. 7. 18:48 |insert  into aaa.dbo.aa select * from bbb.dbo.bb;
-- 이걸 사용하게 되면 다른 DB의 같은 테이블 구조를 가지고 있을때 내용을 복사할 수 있다.
insert  into aaa.dbo.aa select * from bbb.dbo.bb;
-- 이걸 사용하게 되면 다른 DB의 같은 테이블 구조를 가지고 있을때 내용을 복사할 수 있다.
DROP TABLE #MyTempTable; --임시테이블을 만든다.
-- CTE 구조로 해서 원하는 내용을 뽑아 온다.
with empCTE(
 _idx,
 _uid, 
 _puid)
as
(
 -- boss only
 select idx, uid, puid
 from userList_tmp
 where uid = 'test1' and grade = '2' --최초 탐색 시점
union all
 select aa.idx, aa.uid, aa.puid
 from userList_tmp as aa inner join empCTE as bb
 on aa.puid = bb._uid
 --where bb.level < 3
)
select _idx into #MyTempTable from empCTE --임시테이블로 복사
GO
-- 임시 테이블의 내용을 원본 테이블에서 삭제
delete from userList_tmp where idx in (select * from #MyTempTable)  제
declare @idx int
declare @account varchar(20)
declare @nickname varchar(20)
declare @account2 varchar(20)
declare @nickname2 varchar(20)
set @idx = 0
set @account = 'test'
set @nickname = 'Dummy'
while (1=1)
begin
 if @idx > 9999 break;
 set @account2 = @account + convert(varchar(4), @idx)
 set @nickname2 = @nickname + convert(varchar(4), @idx)
 print @idx
 print @account2 + @nickname2
 INSERT INTO [NDT].[dbo].[USERACCOUNT]
           ([ACCOUNT]
           ,[PASSWORD]
           ,[NICKNAME]
           ,[MONEY]
           ,[LOGINSTATE])
     VALUES
           (@account2
           ,'1'
           ,@nickname2
           ,0
           ,0)
 set @idx = @idx + 1
end
-- 최초 입력 데이터
idx         hostName                                           value       regDate                 flag
----------- -------------------------------------------------- ----------- ----------------------- ----
15934       P6901756001C                                       4           2009-02-19 16:25:36.150 0
15935       P6901756001C                                       5           2009-02-19 16:25:46.150 0
15936       P6901756001C                                       1           2009-02-19 16:25:56.167 0
15937       P6901756001C                                       3           2009-02-19 16:26:06.150 0
15938       P6901756001C                                       3           2009-02-19 16:26:16.150 0
15939       P6901756001C                                       3           2009-02-19 16:26:26.150 0
15940       P6901756001C                                       2           2009-02-19 16:26:36.150 0
15941       P6901756001C                                       2           2009-02-19 16:26:46.150 0
15942       P6901756001C                                       1           2009-02-19 16:26:56.150 0
15943       P6901756001C                                       2           2009-02-19 16:27:06.150 0
15944       P6901756001C                                       1           2009-02-19 16:27:16.150 0
-- 변경후 데이터
idx         hostName                                           value       valueSum    valueCount  regDate                 flag
----------- -------------------------------------------------- ----------- ----------- ----------- ----------------------- ----
5           P6901756001C                                       0           50          20          2009-02-19 15:45:00.000 0
6           P6901756001C                                       0           99          30          2009-02-19 15:50:00.000 0
7           P6901756001C                                       0           97          30          2009-02-19 15:55:00.000 0
8           P6901756001C                                       0           287         30          2009-02-19 16:00:00.000 0
9           P6901756001C                                       0           218         30          2009-02-19 16:05:00.000 0
10          P6901756001C                                       0           362         30          2009-02-19 16:10:00.000 0
11          P6901756001C                                       0           131         30          2009-02-19 16:15:00.000 0
12          P6901756001C                                       0           163         30          2009-02-19 16:20:00.000 0
13          P6901756001C                                       0           23          3           2009-02-19 16:25:00.000 0
-- 구성 내용
10초에 한번씩 입력 되는 해당 데이터의 내용을 5분 단위로 끊어서 새로운 테이블로 통계를 낸다.
값이 일정하지도 않을수 있고, 값의 주기가 조금씩 틀릴수도 있다.
우선 테스트를 통해서 더 보완 해야 할듯 하다. (커서를 몰라서 이렇게 걍 작성 했다.)
-- 배울점
1. 시간 값의 구간을 5분 단위로 구분
USE [GPMS]
GO
/****** 개체:  UserDefinedFunction [dbo].[CHANGEDATETIME]    스크립트 날짜: 02/19/2009 16:57:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 날짜변환하는부분을함수로작성
CREATE  FUNCTION [dbo].[CHANGEDATETIME] (
       @sdate varchar(30)
       )RETURNS DATETIME
AS
BEGIN
       DECLARE @RETURNVALUE DATETIME
       BEGIN
             SELECT  @RETURNVALUE=CASE WHEN  CHARINDEX('오후',@sdate)>0
                    THEN DATEADD(HH,12,CONVERT (DATETIME, REPLACE(@sdate,'오후','')))
                    ELSE CONVERT (DATETIME,REPLACE(@sdate,'오전','') )
                    END
       END
       RETURN(@RETURNVALUE)
END
-- 결과
문자열을 시간 값으로 변경해 준다.
하지만 문자열이 시간값과 같은 포멧으로 구성되어 있어야 한다.
ex) 2009-02-19 14:25:00
USE [GPMS]
GO
/****** 개체:  UserDefinedFunction [dbo].[GETSTIMEPER5MINTODATETIME]    스크립트 날짜: 02/19/2009 16:55:38 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
/* 
 GETDATETIMEPERMIN : 2006-09-19 BY J.Y. PARK,
 DESC: 입력받은 DATETIME의 초,밀리세컨드를 0으로 수정하고 5분단위 시간으로 반환
 */
CREATE   FUNCTION [dbo].[GETSTIMEPER5MINTODATETIME]
 ( @IDATETYPE DATETIME)
RETURNS VARCHAR(20)
AS
 BEGIN
 DECLARE @SNEWTIME VARCHAR(20)
 DECLARE @SMIN VARCHAR(5)
SET @SNEWTIME = DATENAME(YY,@IDATETYPE)
SET @SNEWTIME = @SNEWTIME + '-' + DATENAME(MM,@IDATETYPE)
 IF DATEPART(DD,@IDATETYPE) < 10
  SET  @SNEWTIME =  @SNEWTIME + '0'
 SET  @SNEWTIME =  @SNEWTIME + '-' + DATENAME(DD,@IDATETYPE) + ' '
 IF DATEPART(HH,@IDATETYPE) < 10
  SET  @SNEWTIME =  @SNEWTIME + '0'
 SET  @SNEWTIME =  @SNEWTIME + DATENAME(HH,@IDATETYPE)
 IF DATEPART(MI,@IDATETYPE) < 10
  SET  @SMIN =  '0' + DATENAME(MI,@IDATETYPE)
 ELSE
  SET @SMIN = DATENAME(MI,@IDATETYPE)
 IF (DATEPART(MI,@IDATETYPE) % 10) >= 5
  SET @SNEWTIME = @SNEWTIME + ':' + LEFT(@SMIN,1) + '5'
 ELSE
  SET @SNEWTIME = @SNEWTIME + ':' + LEFT(@SMIN,1) + '0'
 RETURN @SNEWTIME
 END
-- 결과
GETSTIMEPER5MIN 와 비슷하지만 이건 이 문자열을 DateTime로 변환이 가능한
문자열 형태로 반환한다.
USE [GPMS]
GO
/****** 개체:  UserDefinedFunction [dbo].[GETSTIMEPER5MIN]    스크립트 날짜: 02/19/2009 16:54:01 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
/* 
 GETDATETIMEPERMIN : 2006-09-19 BY J.Y. PARK,
 DESC: 입력받은 DATETIME의 초,밀리세컨드를 0으로 수정하고 5분단위 시간으로 반환
 */
CREATE   FUNCTION [dbo].[GETSTIMEPER5MIN]
 ( @IDATETYPE DATETIME)
RETURNS VARCHAR(20)
AS
 BEGIN
 DECLARE @SNEWTIME VARCHAR(20)
 DECLARE @SMIN VARCHAR(5)
SET @SNEWTIME = DATENAME(YY,@IDATETYPE)
SET @SNEWTIME = @SNEWTIME + DATENAME(MM,@IDATETYPE)
 IF DATEPART(DD,@IDATETYPE) < 10
  SET  @SNEWTIME =  @SNEWTIME + '0'
 SET  @SNEWTIME =  @SNEWTIME + DATENAME(DD,@IDATETYPE)
 IF DATEPART(HH,@IDATETYPE) < 10
  SET  @SNEWTIME =  @SNEWTIME + '0'
 SET  @SNEWTIME =  @SNEWTIME + DATENAME(HH,@IDATETYPE)
 IF DATEPART(MI,@IDATETYPE) < 10
  SET  @SMIN =  '0' + DATENAME(MI,@IDATETYPE)
 ELSE
  SET @SMIN = DATENAME(MI,@IDATETYPE)
 IF (DATEPART(MI,@IDATETYPE) % 10) >= 5
  SET @SNEWTIME = @SNEWTIME + LEFT(@SMIN,1) + '5'
 ELSE
  SET @SNEWTIME = @SNEWTIME  +LEFT(@SMIN,1) + '0'
 RETURN @SNEWTIME
 END
-- 결과는 아래와 같이 나옵니다.
2009-02-19 14:23:41 -> 20090219142340
 
방명록 기본 코드
이름, 이메일, 컨텐츠, 비밀번호, 입력날짜, 입력 IP로 구성된 심플 방명록이다.
DB에 Insert 하는 것과 Select로 GridView에 추가 하는 내용이 포함되어 있다.
DB 쿼리 기본 내용
cs 기본 파일
애플리케이션 카운터 설정 및 세션 카운터 설정 방법
애플리케이션은 현재 애플리케이션이 생성된 때부터 카운터 되는 고유한 값이다.
세션 카운터는 접속한 사용자에 따라서 다르게 나타나는 카운터 값이다.
** 이때 애플리케이션 및 세션 카운터를 초기화를 해주고 싶다면 Global.aspx 에서 제공된 메소드에서
    처리해야 한다.
cs 기본 파일