블로그 이미지
정홍주
Azure에 대한 내용뿐만 아니라 새로운 트렌드로 빅데이터, BI, SharePoint, 앱 등의 내용을 다룹니다.

calendar

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Notice

2011.06.27 08:52 SQL/T-SQL

커뮤니티에 약간 자주 String Concat, String Group By가 올라와서..,

 

USE AdventureWorks

GO

 

SELECT c.Name ID,  s.Name 

INTO #t

 FROM Production.ProductCategory c

JOIN Production.ProductSubcategory s ON c.ProductCategoryID=s.ProductCategoryID

 

 

SELECT * FROM #t

 

Bikes Mountain Bikes

Bikes Road Bikes

Bikes Touring Bikes

Components Handlebars

Components Bottom Brackets

Components Brakes

Components Chains

Components Cranksets

Components Derailleurs

Components Forks

Components Headsets

Components Mountain Frames

…..,

 

 

SELECT ID, STUFF(

     (SELECT  ',' + a.Name  AS [text()]

     from #t  a

     where a.ID = b.ID

     Order by a.Name

     for xml PATH('')),1,1,''   ) AS r

 from #t b

group by ID

ORDER BY ID


신고
posted by 정홍주
2011.02.18 22:14 SQL/T-SQL

에러 핸들링(Error Handlig )

SQL Server의 Try Catch 에 대한 내용

 BEGIN TRY

 

--실행문

 

END TRY

 

BEGIN CATCH

 

SELECT @Err_Number=ISNULL(error_number(),0)

,@Err_Message=ISNULL(error_message(),'NULL Message')

,@Err_Severity=ISNULL(error_severity(),0)

,@Err_State=ISNULL(error_state(),1)

,@Err_Line=ISNULL(error_line(),'NULL Message')

,@Err_Procedure=ISNULL(error_message(),'')

,@UserName=SUSER_NAME()

,@HostName=HOST_NAME()

,@Time_Stamo=GETDATE()

 

-- ERROR Logging

 

END CATCH

 

AdventureWorks 데이터베이스의 에러 핸들링 구조

1. dbo.ErrorLog 테이블 생성
2. dbo.uspLogError 로그 저장 프로시저 생성(dbo.ErrorLog  테이블에 위에 관련된 값 이용 INSERT)
3. 각 저장 프로시저의 CATCH 문에서 dbo.uspLogError  사용

BEGIN CATCH

        -- Rollback any active or uncommittable transactions before

        -- inserting information in the ErrorLog

        IF @@TRANCOUNT > 0

        BEGIN

            ROLLBACK TRANSACTION;

        END

 

        EXECUTE [dbo].[uspLogError];

END CATCH;

 

신고
posted by 정홍주
2011.02.14 08:30 SQL/T-SQL


커뮤니티의 게시판에 Excel에서는 날짜를 정수로 변경하면 SQL Server에서 변환한 값과 2일의 차이가 난다는 내용이 올라와서 이리저리 찾아서 정리합니다.

예전 Lotus 1-2-3에서는 시작일을 1899-12-31로 잡고 있습니다. 호환성 때문에 Excel 0 일을 1899-12-31로 계산하고 있습니다. 1900-01-01Excel에서 정수로 변경하면 1 이 나오는 것을 알 수 있습니다.

또한 1900-02-29 Excel에서는 존재합니다.

하지만 날짜를 비교하거나 할 경우 SQL Server에서는 시작일을 1900-01-01 로 처리하고 있습니다. 이른바 0 일이 되는 거죠. 1900-02-29T-SQL에서 변환하면 에러가 발생합니다.

SELECT CONVERT(DATETIME,'1900-02-29')

 

메시지242, 수준16, 상태3, 1

varchar 데이터형식을datetime 데이터형식으로변환하는중값범위를벗어났습니다.

하여간 여러 가지 내용으로 인해 2일의 차이가 발생하게 됩니다.

SELECT
DATEDIFF(dd, '1900-01-01 12:00:00 AM','2011-02-14 12:00:00 AM')

-- 결과 40586

-- Excel 결과 40588



흠...,

신고
posted by 정홍주
2011.02.11 08:30 SQL/T-SQL


데이터베이스에 대한 연결의 spid를 한번에 KILL 할 수 있도록 구성해주는 쿼리문


DECLARE @kill VARCHAR(MAX)

SELECT @kill=COALESCE(@kill,'') + 'KILL '

 + CAST(spid AS VARCHAR(10)) +'; '

FROM sys.sysprocesses

WHERE DBID=DB_ID('AdventureWorks')

 

 

PRINT @kill

 

--결과 KILL 53; KILL 71; KILL 86;

 

 

신고
posted by 정홍주
prev 1 next

티스토리 툴바