사용자 도구

사이트 도구


mssqlserver

문서의 이전 판입니다!


MS SQL Server

2017 Linuix 버전 설치

sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=password12!' \
   -p 1433:1433 --name sqlserver2017 \
   -d microsoft/mssql-server-linux:2017-latest
 
# 완성형 필요하면 추가 옵션
-e "MSSQL_COLLATION=Korean_Wansung_CI_AS"
  • Docker 사용시 특히 Mac, Windows 에서는 Docker에 할당된 메모리가 4GB 이상인지 확인해야 한다.
  • 그 외버전을 Docker 로 접속가능하게 Windocks
# 한번에
docker exec -it sqlserver2017  /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'password12!'
 
# docker 내부에서 command line 으로 DB접속
docker exec -it sqlserver2017 "bash"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'password12!'
  • sqlcmd에서 port 지정은 -S localhost,1433 처럼 Hostname 뒤에 쉼표로 한다.

Vagrant로 SQLServer 설치하기

git clone https://github.com/kwon37xi/vagrant-mssql-express.git
cd vagrant-mssql-express
vagrant up
  • DB 접속정보
    • IP/HOST : 192.168.50.4 localhost로 포트포워딩해서 접속 가능
    • Username: sa
    • Password: password12!
      • install-sql-server.cmd 수정해서 변경가능
  • rdp
    • 먼저 apt-get install rdesktop
    • vagrant rdp 실행
    • Username: vagrant
    • Password: vagrant

No Lock

  • 읽기 전용일 경우 DB 락을 안 걸게 하는 것이 좋다. ISOLATION을 READ_UNCOMMITTED로 하거나 모든 FROM절의 테이블 명 뒤에 WITH (NOLOCK)을 지정한다. 붙여쓰지 말것.
SELECT id
FROM table_a WITH (NOLOCK)
 
SELECT a.id, b.id
FROM table_a a WITH (NOLOCK), table_b b WITH (NOLOCK)
WHERE a.id=b.id

SQL log

현재 DB에서 실행된 실제 SQL 문을 보고 싶다면 Logging all queries executed on MSSQL database | ..:: JOCHEN HEBBRECHT ::..

SELECT        SQLTEXT.text, STATS.last_execution_time
FROM          sys.dm_exec_query_stats STATS
CROSS APPLY   sys.dm_exec_sql_text(STATS.sql_handle) AS SQLTEXT
WHERE         STATS.last_execution_time > GETDATE()-1
ORDER BY      STATS.last_execution_time DESC

Apply

DROP TABLE IF EXISTS

2016 이전 버전 및 SQL 표준 방법

IF EXISTS (SELECT * FROM [CATALOG_NAME].INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='[TABLE_NAME]' AND TABLE_SCHEMA='dbo')
DROP TABLE [CATALOG_NAME].dbo.[TABLE_NAME];

2016 이후 버전

DROP TABLE IF EXISTS [CATALOG_NAME].dbo.[TABLE_NAME];

varchar vs nvarchar

  • varchar : 8bit(1byte) 단위로 문자를 저장한다.
  • nvarchar : unicode 로 문자를 저장한다. 한글 한글자 '한'은 length가 1이 된다. 그러나 실제 저장소는 16bit(2byte)를 차지한다.
  • 가능하면 nvarchar로 통일하는게 좋다. 그렇지 않고 두가지가 섞일 경우 매우 복잡한 byte 조작이 필요해진다.

datetime / datetime2

INSERT

  • INSERT 를 할 때 AUTO INCREMENT PK를 직접 지정하고 싶다면 IDENTITY_INSERT를 지정해야 한다.
SET IDENTITY_INSERT books ON;

// books table에 insert

SET IDENTITY_INSERT books OFF;

참고

mssqlserver.1535348884.txt.gz · 마지막으로 수정됨: 2018/08/27 14:48 저자 kwon37xi