레이블이 SQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SQL인 게시물을 표시합니다. 모든 게시물 표시

2018년 7월 5일 목요일

트랜잭션 로그/NGRAM 함수


트랜잭션로그 정리

SELECT [name], [recovery_model_desc] FROM sys.databases WHERE [name] = DB_NAME()

ALTER DATABASE SyncAddress SET RECOVERY SIMPLE

     (SELECT 논리적파일이름 = [Name] FROM sys.database_files WHERE type = 1)

DBCC SHRINKFILE('SyncAddress_log', 500000)

ALTER DATABASE SyncAddress SET RECOVERY FULL



NGRAM

USE [SyncAddress]
GO
/****** Object:  UserDefinedFunction [dbo].[FN_PARSE]    Script Date: 2018-07-06 오후 2:05:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:               <Author,,Name>
-- Create date: <Create Date, ,>
-- Description:  <Description, ,>
-- =============================================
ALTER FUNCTION [dbo].[FN_PARSE]
(
        -- Add the parameters for the function here
        @STR NVARCHAR(4000)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
        -- Declare the return variable here
        DECLARE @RETVAL NVARCHAR(MAX) = ''
        DECLARE @MODSTR NVARCHAR(4000) = REPLACE(@STR, ' ', '')
        -- Add the T-SQL statements to compute the return value here
       

        DECLARE @GRAM INT = 1
        DECLARE @POS INT =  1

        WHILE(@GRAM <= LEN(@MODSTR))
        BEGIN
IF @GRAM > 5 BREAK
                 WHILE(@POS + @GRAM <= LEN(@MODSTR))
                 BEGIN
                         SET @RETVAL += SUBSTRING(@MODSTR, @POS, @GRAM) + ' '
                         SET @POS = @POS + 1             
                 END
                 SET @POS = 1
                 SET @GRAM = @GRAM + 1
        END

        -- Return the result of the function
        RETURN @RETVAL

END

2018년 3월 26일 월요일

SET NOCOUNT ON

SET NOCOUNT ON 이 빠져있거나 SET NOCOUNT OFF로 설정이 되어 있으면 프로시저는 항상 자신의 마지막 로직에 의해서 SELECT, UPDATE, INSERT, DELETE된 행의 갯수를 리턴하게 된다. 그 수를 받아서 'nn개의 행이 적용되었습니다.'라는 메세지를 뿌려주게 된다. 제아무리 RecordSet을 반환한다 할 지라도 실제로는 RecordSet이 넘어오지 않는 것이다.

2017년 10월 25일 수요일

MSSQL 연결된서버 사용하기 (linked server)

 - MSSQL 연결된 서버란?

   MSSQL 은 연결된서버 기능을 제공하는데 이를 이용하면 다른 네트워크의 데이터베이스를 원격으로 접속하여
   사용할 수 있도록 해줍니다.


 - MSSQL 연결된 서버 생성

   EXEC sp_addlinkedserver
      @server = '[연결된 서버별칭]',
      @srvproduct = '',
      @provider = 'SQLOLEDB',
      @datasrc = '[서버 아이피]',
      @catalog = '[데이터 베이스명]'

 - MSSQL 연결계정 생성

   EXEC sp_addlinkedsrvlogin
      @rmtsrvname= '[연결된 서버별칭]',
      @useself= 'false',
      @rmtuser = '[사용자 이름]',
      @rmtpassword = '[사용자 암호]'


 - MSSQL 연결된 서버 확인

   SELECT FROM master.dbo.sysservers WHERE srvname = '[연결된 서버별칭]'


 - MSSQL 연결계정 확인

   SELECT FROM master.sys.linked_logins WHERE remote_name = '[사용자 이름]'


 - MSSQL 연결된 서버 이용방법

   연결된 서버를 등록한 후 사용하려면 [연결된 서버별칭].[데이터 베이스명].[데이터베이스 소유자명].[테이블명]
   형태로 호출하여 사용할 수 있습니다.
   SELECT 쿼리를 예로 들면 아래와 같습니다.


 - MSSQL 일반서버에 SELECT 쿼리시

​   SELECT [컬럼명] FROM [테이블명] WHERE [조건절]

 - MSSQL 연결된 서버에 SELECT 쿼리시

​   SELECT [컬럼명] FROM [연결된 서버별칭].[데이터 베이스명].[데이터베이스 소유자명].[테이블명] WHERE [조건절]


 - MSSQL 연결된 서버 삭제

   EXEC sp_dropserver
      @server = '[연결된 서버별칭]'

 - MSSQL 연결계정 삭제

   EXEC sp_droplinkedsrvlogin
      @rmtsrvname= '[연결된 서버별칭]',
      @locallogin = NULL

 [참고사항] 연결된 서버 삭제

   연결된 서버를 삭제하기 위해서는 sp_droplinkedsrvlogin 을 이용하여 연결계정을 먼저 삭제하고
   sp_dropserver 를 이용하여 연결된 서버를 삭제하여야 합니다.



 - 예제 1

   아래와 같은 정보를 갖는 연결된 서버를 생성하시오.


항목
상세 내용
연결된 서버별칭
linkedserver
서버 아이피
192.168.1.3
데이터 베이스명
test
사용자 이름
id
사용자 암호
password

 예제 1 쿼리

   EXEC sp_addlinkedserver
      @server = 'linkedserver',
      @srvproduct = '',
      @provider = 'SQLOLEDB',
      @datasrc = '192.168.1.3',
      @catalog = 'test'

   EXEC sp_addlinkedsrvlogin
      @rmtsrvname= 'linkedserver',
      @useself= 'false',
      @rmtuser = 'id',
      @rmtpassword = 'password'


 - 예제 2

   예제1에서 생성한 연결된 서버와 연결계정을 확인하시오.


 - 예제 2 연결된 서버 생성여부 확인

   SELECT FROM master.dbo.sysservers WHERE srvname = 'linkedserver'


srvid
srvstatus
srvname
1
1184
linkedserver

 - 예제 2 연결계정 생성여부 확인

   SELECT FROM master.sys.linked_logins WHERE remote_name = 'id'


server_id
local_principal_id
uses_self_credential
remote_name
modify_date
1
0
0
id
2015-03-22 16:11:41.637

srvid
srvstatus
srvname
1
1184
linkedserver

 - 예제 3

   예제1에서 생성한 연결된 서버를 이용하여 아래와 같은 테이블의 내용을 조회하시오.


 - 192.168.1.3 서버 test.dbo.성적 테이블
일련번호
이름
점수
1
홍길동
90
2
일지매
95
3
임꺽정
85

 - 예제 3 쿼리

   SELECT 일련번호이름점수 FROM linkedserver.test.dbo.성적

일련번호
이름
점수
1
홍길동
90
2
일지매
95
3
임꺽정
85
 - 예제 4

   예제1에서 생성한 연결된 서버와 연결계정을 삭제하시오.

 - 예제 4 쿼리

   EXEC sp_droplinkedsrvlogin
      @rmtsrvname= 'linkedserver',
      @locallogin = NULL

   EXEC sp_dropserver
      @server = 'linkedserver'

2017년 9월 19일 화요일

[MS-SQL] 날짜 형식(포맷) 변경 방법 (CONVERT, TO_CHAR)


SQL Server 2008, SQL Server 2012
 
날짜(Date) 형식의 값을 특정 문자(String) 포맷(Format)으로 바꾸는 방법을 소개한다.
아래는 자주 사용하는 YYYY-MM-DD HH24:MI:SS 로 변경하는 방법이다.
 
CONVERT( [포맷(길이)], [날짜 값], [변환형식] )

select convert(varchar, getdate(), 120)
--결과 : 2014-12-12 19:21:36;
select convert(varchar(10), getdate(), 120)
--결과 : 2014-12-12
;
select convert(varchar(16), getdate(), 120)
--결과 : 2014-12-12 19:21


[이외의 날짜 변환형식]
select convert(varchar, getdate(), 100)  --mon dd yyyy hh:miAM (or PM)
select convert(varchar, getdate(), 101)  --mm/dd/yyyy
select convert(varchar, getdate(), 102)  --yyyy.mm.dd
select convert(varchar, getdate(), 103)  --dd/mm/yyyy
select convert(varchar, getdate(), 104)  --dd.mm.yyyy
select convert(varchar, getdate(), 105)  --dd-mm-yyyy
select convert(varchar, getdate(), 106)  --dd mon yyyy
select convert(varchar, getdate(), 107)  --Mon dd, yyyy
select convert(varchar, getdate(), 108)  --hh:mm:ss
select convert(varchar, getdate(), 109)  --mon dd yyyy hh:mi:ss:mmmAM (or PM)
select convert(varchar, getdate(), 110)  --mm-dd-yyyy
select convert(varchar, getdate(), 111)  --yyyy/mm/dd
select convert(varchar, getdate(), 112)  --yyyymmdd
select convert(varchar, getdate(), 113)  --mon yyyy hh:mi:ss:mmm (24h)
select convert(varchar, getdate(), 114)  --hh:mi:ss:mmm (24h)
select convert(varchar, getdate(), 120)  --yyyy-mm-dd hh:mi:ss (24h)
select convert(varchar, getdate(), 121)  --yyyy-mm-dd hh:mi:ss.mmm (24h)
select convert(varchar, getdate(), 126)  --yyyy-mm-ddThh:mi:ss.mmm
select convert(varchar, getdate(), 130)  --dd mon yyyy hh:mi:ss:mmmAM
select convert(varchar, getdate(), 131)  --dd/mm/yyyy hh:mi:ss:mmmAM
 
[추가설명]
mm: 월의 숫자 표현
mon: 월의 이름의 짧은 표현 (날짜 셋, , 국가코드에 따라서 영어인지 다른언어로 나올 수도 있다.)


이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요.