--USE [TempTable]
--GO
/****** Object:  UserDefinedFunction [dbo].[fn_GetFileInfoInFullPathUsingXml]    Script Date: 2017-01-17 오후 1:43:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-----------------------------------------------------------------------------------------------------------  
--  파일경로에서 파일정보 가져오기  
--  파일경로 문자열에서 파일명,경로,확장자가지오기(filepath:경로,filename:파일명,extension:확장자)  
--  예: SELECT 데이터베이스명.소유자명.fn_GetFileInfoInFullPathUsingXml('filename','test.xml','/')  
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('filename','c:/dkdk/test.xml','/')  
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('filepath','c:/dkdk/test.xml','/')  
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('extension','c:/dkdk/test.xml','/')  
-----------------------------------------------------------------------------------------------------------  
-----------------------------------------------------------------------------------------------------------  
-- 프로시저 생성  
-----------------------------------------------------------------------------------------------------------  
  
ALTER FUNCTION     [dbo].[fn_GetFileInfoInFullPathUsingXml]  
(  
    @iGubun         NVARCHAR(10),   -- filepath:경로,filename:파일명,extension:확장자  
    @iFullPath      NVARCHAR(MAX),  
    @iDelimiter     NVARCHAR(10)  
)   
RETURNS NVARCHAR(MAX)  
AS  
BEGIN  
      
      
    DECLARE @wTblSplit AS TABLE   
    (  
         Seq        INT     IDENTITY(1,1),  
         Fragment   NVARCHAR(MAX)  
    )  
    DECLARE @wFileInfo  NVARCHAR(MAX)  
    DECLARE @wXml       XML  
    DECLARE @wMax       INT  
      
    SELECT  @wFileInfo  = ''  
    SELECT  @wMax       = 0  
    SET     @wXml       = N'' + REPLACE(@iFullPath, @iDelimiter,'') + ''  
  
    INSERT  INTO @wTblSplit(Fragment)  
    SELECT  r.value('.','NVARCHAR(MAX)') as item  
    FROM    @wXml.nodes('//root/r') as records(r)  
  
    SELECT  @wMax   = MAX(Seq) FROM @wTblSplit  
    IF  @iGubun = 'filepath'  
    BEGIN  
        IF  @wMax   = 1  
        BEGIN  
            SELECT  @wFileInfo = '.'  
        END  
        ELSE  
        BEGIN  
            SELECT  @wFileInfo  = COALESCE(@wFileInfo + @iDelimiter + Fragment, Fragment)  
            FROM    @wTblSplit  
            WHERE   Seq         < @wMax  
            ORDER BY Seq  
              
            SELECT  @wFileInfo  = SUBSTRING(@wFileInfo,2,LEN(@wFileInfo)) + '/'  
        END  
    END  
    ELSE IF @iGubun = 'filename'  
    BEGIN  
        SELECT  @wFileInfo = Fragment FROM @wTblSplit WHERE Seq = @wMax
		SELECT  @wFileInfo = SUBSTRING(@wFileInfo,1,CHARINDEX('.',@wFileInfo))  
    END  
    ELSE IF @iGubun = 'extension'  
    BEGIN  
        SELECT  @wFileInfo = Fragment FROM @wTblSplit WHERE Seq = @wMax  
        SELECT  @wFileInfo = SUBSTRING(@wFileInfo,CHARINDEX('.',@wFileInfo)+1,LEN(@wFileInfo)-CHARINDEX('.',@wFileInfo))  
    END  
      
    RETURN LTRIM(RTRIM(@wFileInfo))  
  
END


http://rocabilly.tistory.com/88 에 있던걸 extension 부분만 수정했다. aaa.bbb.ccc.jpg 처럼 dot('.')이 여러개일경우 오류가 발생할수 있다.


Posted by 두억시니 트랙백 0 : 댓글 0
CREATE FUNCTION [dbo].[fx_FormatUsingMask] 
(
    -- Add the parameters for the function here
    @input nvarchar(1000),
    @mask nvarchar(1000)
)
RETURNS nvarchar(1000)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result nvarchar(1000) = ''
    DECLARE @inputPos int = 1
    DECLARE @maskPos int = 1
    DECLARE @maskSign char(1) = ''

    WHILE @maskPos <= Len(@mask)
    BEGIN
        set @maskSign = substring(@mask, @maskPos, 1)

        IF @maskSign = '#'
        BEGIN
            set @result = @result + substring(@input, @inputPos, 1)
            set @inputPos += 1
            set @maskPos += 1
        END
        ELSE
        BEGIN
            set @result = @result + @maskSign
            set @maskPos += 1
        END
    END
    -- Return the result of the function
    RETURN @result

END

MSSQL 버전마다 어떤지는 모르겠지만, 적당한 함수를 못찾아서 인터넷을 검색해보니 이런 녀석이 나오드라.

사용 예)
select dbo.fx_FormatUsingMask('201503050900', '####-##-## ##:##:00')

Posted by 두억시니 트랙백 0 : 댓글 0


-- 테이블 이름 변경
-- CustomerName 이라는 테이블을 Customer 라는 이름으로 변경
sp_rename 'CustomerName', 'Customer'

-- 컬럼 이름 변경
-- Test 테이블의 CustomerName 이라는 컬럼을 Customer라는 이름으로 변경
sp_rename 'reserve.[CustomerName]', 'Customer', 'COLUMN'

-- 컬럼 타입 변경
-- Test 테이블의 Customer 컬럼의 타입을 varchar(10)으로 변경
ALTER TABLE Test
ALTER COLUMN Customer varchar(10)



종종 사용하는데 왜 기억을 못하는 걸까? ㅠ_ㅜ

Posted by 두억시니 트랙백 0 : 댓글 0
1. 'sample' 테이블에 'add_key'  컬럼 추가
Alter Table [sample]
Add [add_key] varchar(5) Not Null

2. 기존 기본키 삭제(키이름:PK_sample)
Alter Table [sample]
Drop Constraint PK_sample

3. 새 기본키로 설정
Alter Table [sample]
Add Constraint PK_sample Primary Key ([add_key])

Posted by 두억시니 트랙백 0 : 댓글 0

초일/말일 구하기

2009.11.17 19:03 from database/mssql

DECLARE @IDATE varchar(8)

SET @IDATE = '20090102'

 

/* 말일구하기 */
SELECT Convert(Varchar, DATEADD(DAY,-DATEPART(DD,DATEADD(MONTH,1,@IDATE)),DATEADD(MONTH,1,@IDATE)), 112)

 

/* 초일구하기 */
SELECT Convert(Varchar, DATEADD(DAY,1,DATEADD(DAY,-DATEPART(DD,@IDATE),@IDATE)), 112)

Posted by 두억시니 트랙백 0 : 댓글 0

MSSQL 락(lock) 해제

2009.06.08 17:52 from database/mssql

① sp_lock
프로시저를 실행하여 mode가 x 인 녀석을 확인

② dbcc inputbuffer(spid)
클라이언트에서 MSSQL로 보낸 최종 명령문 표시, 위의 1번에서 X인 녀석의 spid를 입력하면 해당 테이블이 출력된다.

③ kill spid
문제가 되는 spid를 kill 합니다.

TAG Lock,
Posted by 두억시니 트랙백 0 : 댓글 0
사용>
SELECT CONVERT(CHAR(8), DATEADD(M, 1, '20090522'), 112)

결과>
20090622
Posted by 두억시니 트랙백 0 : 댓글 0

Microsoft SQL 2000 에서 특정 Database 의 트랜잭션 로그의 최대 파일 크기를 조정 하려고 하니 다음과 같은 오류 메시지가 출력되었다. Microsoft SQL-DMO (ODBC SQLState: 42000)

Error

Microsoft SQL-DMO (ODBC SQLState: 42000)


더보기

Posted by 두억시니 트랙백 0 : 댓글 0

INSERT INTO [테이블] (컬럼1, 컬럼2, 컬럼3...컬럼X)
VALUES (값1, 값2, 값3...값X)

UPDATE [테이블명]
SET 컬럼1 = 값1, 컬럼2 = 값2, 컬럼3 = 값3...컬럼X = 값X)

-_-; 갑자기 생각이 안나서 적어둬야겠다. 아 쪽팔려. ㅠ_ㅜ

Posted by 두억시니 트랙백 0 : 댓글 1
사용자 삽입 이미지
Error Message :
SQL Server 2005에 연결하는 경우 SQL Server 기본 설정에서는 원격 연결을 허용하지 않기 때문에 발생한 오류일 수 있습니다. (Provider : 명명된 파이프 공급자, error: 40 -SQL Server에 대한 연결을 열 수 없습니다.)(Microsoft SQL Server, Error: 1326)
- 정확한 원인은 알수 없지만, Microsoft SQL 2005 를 설치하면 기본값으로 원격 연결이 설정 되지 않았다.





처리방법(Microsoft Windows XP Professional 기준) :
SQL Server 노출 영역 구성

SQL Server 노출 영역 구성

① [시작] - [모든 프로그램] - [Microsoft SQL Server 2005] - [구성 도구] - [SQL Server 노출 영역 구성] 실행 후 화면 하단의 [서비스 및 연결에 대한 노출 영역 구성] 클릭.



서비스 및 연결에 대한 노출 영역 구성

서비스 및 연결에 대한 노출 영역 구성

② 좌측 메뉴의 [원격 연결] 클릭.



사용자 삽입 이미지
③ [TCP/IP 및 명명된 파이프 모두 사용] combobox check 후 적용 후 SQL 서비스를 다시시작 하거나 컴퓨터를 reboot 시킨다.



사용자 삽입 이미지
④ 좌측 메뉴의 [SQL Server browser] 선택 후 우측 메뉴에서 시작 유형을 [자동] 으로 해주고 [시작] 버튼을 누르면 [SQL Server Browser] 서비스가 정상적으로 시작된다.


위의 방법까지 진행해도 원격 연결이 되지 않으면, firewall 설정을 다시 해주거나 자신의 Netwok 상태를 확인해 본다.
Posted by 두억시니 트랙백 1 : 댓글 2