Update를 하는데 그냥 WHERE조건으로 하는게 아니라 다른 테이블과 JOIN을 해서 그 값으로 현재테이블의 값에 넣어야 할 필요가 있어서 사용하게 되었다. 평소에 쓰던 방식과 좀 달라서 어려웠었다.

  1. BEGIN TRAN  
  2.     UPDATE table_1  
  3.     SET column1 = column2  
  4.     FROM table_1 AS A  
  5.     INNER JOIN table_2 AS B  
  6.     ON A.column3 = B.column4  
  7.     INNER JOIN table_3 AS C  
  8.     ON B.column5 = C.column6  
  9. ROLLBACK TRAN  

컬럼수가 많아서 좀 복잡하긴 한데 그냥 내가 쓴 쿼리를 그대로 써 넣었다. (업데이트가 제대로 될지 몰라서 트랜잭션을 걸었다. ㅎㅎ)

컬럼수가 좀 많고 복잡해서 이해가 어려울것 같다. 일단 JOIN이 2번 된 형태이다. table_1에 있는 column1을 table_3에 있는 column2의 값으로 모두 입력해 넣으려고 한 쿼리이다.

일단 업데이트문 자체는 그대로 써주고 그 이하는 SELET문에 쓰는것처럼 FROM절을 사용한다. table_1을 table_2와 JOIN하고 그걸 다시 table_3와 JOIN해서 table_3에 있는 column2를 사용하는 것이다. 이름이 겹치지 않아서인지 column1과 2 따로 별칭을 써주지 않아도 되었다.

평소에 쓰던 쿼리들과는 형태가 좀 다른 형태라 이해가 쉽지 않지만 이렇게 쓰면 Update에 JOIN을 해서 사용할 수 있다.

SELECT * INTO 생성될 테이블명 FROM 원본 테이블 명

예)    SELECT * INTO target FROM source

단 ) 제약조건이나, Identity 정보는 복사되지 않는다.


MS-SQL 쿼리분석기에서 테이블구조만 복사

Select * into (만들고싶은 테이블) From (소스테이블) Where 0=1


MS-SQL 동일 테이블에서 특정 필드값만 변경해서 복사 하는 방법

INSERT INTO AA

(

    필드1, 필드2, 필드3, 필드4, 필드5

)

SELECT

    '2007', 필드2, 필드3, 필드4, 필드5

FROM AA

WHERE 필드1='2006'


서버에서 테이블 복사하는 법은?

간단하게

BACKUP DATABASE 디비명 TO DISK='경로' WITH INIT
restore database 디비명 from disk ='경로'


위의 두가지 방법으로 하셔도 되는데..

또 다른 방법이 있다면..

1. 테스트 서버에 접속한다.

select * from sysfiles 을 실행..
-> 물리적 파일 위치를 확인한다.

2. 테스트 서버의 기동을 정지시킨다.

3. 탐색기를 연후 1번에서 확인한 파일을 복사한다.(CTRL+C)

4. 원본 서버로 이동시킨다.(CTRL+V)

5. 원본 DB로 접속한다.
sp_attach_db [ @dbname = ] 'dbname' ,
[ @filename1 = ] 'filename_n' [ ,...16 ]
DB를 붙인다.

-> 예) 붙일 DB명이 pubs이고 파일이 아래와 같은때
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'

6. use @dbname (해당 DB로 이동한다)

7. 데이터를 확인한다.


* 경로가 틀리면 에러가 납니다. 또는 객체의 소유자가 의도 하지 않았던 것으로
바뀔수 있는데 이는 다시 수정하주면 됩니다.
* 설정하신 인덱스, 사용자, 사용자 정의 함수, 사용자 정의 SP까지 모두 옮겨지게
됩니다.


서버에 있는 테이블을 다른 서버로 옮길 수 있나요?

작업방법은 3 가지 정도가 있을 수 있습니다.

1. 데이터베이스 백업 / 복원

집에 있는 데이터베이스를 백업 받으셨다가 다른 컴퓨터에서 복원하는 방법입니다.

백업방법과 복원방법은 필요하시면 추가 질문 부탁합니다.

2. 데이터베이스 분리/연결

집에 있는 데이터베이스를 잠간 분리했다가 파일을 복사하여 사본을 만들고, 그 사본을 다른 서버로 옮긴다음, 해당 서버에서 다시 연결하면 됩니다.

분리 및 복원방법은 필요하시면 추가 질문 부탁합니다.

3. 데이터 가져오기 및 내보내기

집에 있는 데이터베이스와 옮기고자 하는 서버에 네트워크로 동시에 연결이 가능한 경우라면, 데이터 가져오기 및 내보내기 데이터 가져오기 및 내보내기 유틸리티를 사용하여 데이터와 스키마를 옮길 수 있습니다.

 mdf,ldf 파일을 직접 이동 하는 방법  (추천)

1) A 서버의 서비스를 내린다.

2) A 서버의 mdf, ldf 파일을 카피하여  B 서버로 이동 한다.

  -   디폴트로 SQL   서버를 설치하셨다면 C:\Program Files\Microsoft SQL Server\MSSQL\Data 에 파일가 있을 것임

3) B 서버에서 쿼리 분석기를 실행한다.

4) sp_attach_db 를 이용하여 mdf,ldf 파일을 B 서버에 첨부한다

예) pubs 데이터베이스를 첨부하는 예재

EXEC sp_attach_db @dbname = N'pubs'
   
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
,
   
@filename2 =
N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'  

sp_attach_db

서버에 데이터베이스를 첨부합니다.

구문

sp_attach_db [ @dbname = ] 'dbname' ,
   
[ @filename1 = ] 'filename_n' [ ,...16 ]

인수

[@dbname =] 'dbname'

서버에 첨부될 데이터베이스의 이름입니다. 이 이름은 고유해야 합니다. dbnamesysname이며 기본값은 NULL입니다.

[@filename1 =] 'filename_n'

데이터베이스 파일 경로를 포함한 물리적 이름입니다. filename_nnvarchar(260)이며 기본값은 NULL입니다. 16개까지 파일 이름을 지정할 수 있습니다. 매개 변수 이름은 @filename1에서 시작하여 @filename16까지 증가합니다. 파일 이름 목록은 데이터베이스의 다른 파일을 지정하는 시스템 테이블이 들어 있는 주 파일을 적어도 하나 이상 포함해야 합니다. 또한 목록은 데이터베이스가 분리된 다음 이동된 모든 파일을 포함해야 합니다.

반환 코드 값

0(성공) 또는 1(실패)

결과 집합

없음

비고

 명시적 sp_detach_db 작업을 사용하여 서버에서 이전에 분리된 데이터베이스만이 sp_attach_db를 사용할 수 있습니다.17개 이상의 파일을 지정해야 하는 경우에는 FOR ATTACH 절이 있는 CREATE DATABASE를 사용하십시오.

데이터베이스가 분리된 서버 외의 서버에 데이터베이스를 첨부한 경우 및 분리한 데이터베이스를 복제할 수 있는 경우, sp_removedbreplication을 실행하여 데이터베이스에서 복제본을 제거해야 합니다.

사용 권한

sysadmin 고정 서버 역할의 구성원만이 이 프로시저를 실행할 수 있습니다.

+ Recent posts