select t.name,ep.value,c.name from sys.tables t
left outer join sys.extended_properties ep
on t.object_id = ep.major_id
left outer join sys.columns c
on t.object_id = c.object_id
and ep.minor_id = c.column_id
where t.name in ( 테이블명 )
order by t.object_id, c.object_id

minor_id = 0 인값이 테이블의 설명값

 

 

'ms-sql' 카테고리의 다른 글

Microsoft SQL Server 2008 Express에 원격 접속 허용하기  (3) 2010.11.22
WHERE CURRENT OF  (1) 2010.11.05
ms-sql 쿼리 튜닝  (0) 2010.10.20
SQL 사용시 주의할 점  (1) 2010.10.20
ms-sql db Link  (4) 2010.10.18
Posted by 정광원
,

ms-sql 쿼리 튜닝

ms-sql 2010. 10. 20. 16:16

'ms-sql' 카테고리의 다른 글

WHERE CURRENT OF  (1) 2010.11.05
테이블 및 컬럼 설명값 가져오기  (1) 2010.11.04
SQL 사용시 주의할 점  (1) 2010.10.20
ms-sql db Link  (4) 2010.10.18
ms-sql 2005 설치  (1) 2010.10.18
Posted by 정광원
,

SQL 사용시 주의할 점

ms-sql 2010. 10. 20. 15:56

Join 명령
조건 : T1에 C1과 C2가 있고 T2에 C3와 C4가 있다.
SQL : select T1.C1, T1, C2, T2, C4 from T1 join T2 on T1.C1=T2.C3 where T1.C1 = '1'
주로 사용하는 방식의 Join명령이다. 하지만 이것도 데이터의 수가 많으면 문제가 된다.
T1의 C1을 기준으로 T2의 C3와 매칭시켜 뽑아 오는 Query문인데 이런 경우는 이렇게 처음 부터 만들면 나중에 데이터가 많아지더라도 크게 문제가 되지 않는다.
select VT1.C1, VT2.C2, T2.C4 from (select C1, C2 from T1 where C1='1') VT1 join T2 on VT1=T2
Full scan 이 일어날 만한 명령을 사전에 차단해버리는 방법이다.


Hint 를 주지 않는 경우
조건 : T1에는 C1, C2, C3가 있고 C1과 C2에 각각 Index1과 Index2가 걸려 있다.
SQL : select C1, C2 from T1 where C2 = '1'
이런 경우는 특정 인덱스를 타라고 선언해주는 쪽이 나중에 성능 문제가 발생하지 않을 소지가 높다.
다시말해 이렇게 바꾸도록 하자
MSSQL : select C1, C2 from T1 with (INDEX (index2)) where C2='1'
Oracle : select /*+INDEX(index2) */ C1, C2 from T1 where C2='1'

원문 : http://www.wolfpack.pe.kr/category/13

'ms-sql' 카테고리의 다른 글

테이블 및 컬럼 설명값 가져오기  (1) 2010.11.04
ms-sql 쿼리 튜닝  (0) 2010.10.20
ms-sql db Link  (4) 2010.10.18
ms-sql 2005 설치  (1) 2010.10.18
OPENXML(MS-SQL SP)  (1) 2010.10.18
Posted by 정광원
,

ms-sql db Link

ms-sql 2010. 10. 18. 17:19

'ms-sql' 카테고리의 다른 글

ms-sql 쿼리 튜닝  (0) 2010.10.20
SQL 사용시 주의할 점  (1) 2010.10.20
ms-sql 2005 설치  (1) 2010.10.18
OPENXML(MS-SQL SP)  (1) 2010.10.18
SQL 서버의 잠금에 대한 고찰  (1) 2010.09.10
Posted by 정광원
,

ms-sql 2005 설치

ms-sql 2010. 10. 18. 16:54

'ms-sql' 카테고리의 다른 글

SQL 사용시 주의할 점  (1) 2010.10.20
ms-sql db Link  (4) 2010.10.18
OPENXML(MS-SQL SP)  (1) 2010.10.18
SQL 서버의 잠금에 대한 고찰  (1) 2010.09.10
CTE 방식으로 게시판 List Data가져오기  (3) 2010.09.10
Posted by 정광원
,

OPENXML(MS-SQL SP)

ms-sql 2010. 10. 18. 16:41
declare @doc_xml xml
declare @idnyn int
select @doc_xml = originalxml, @idnyn = idn from doc where idn =@idn

declare @idoc_new int
if @idnyn <> ''
begin
set @idoc_new = 1
EXEC sp_xml_preparedocument @idn OUTPUT, @doc_xml
end
else
begin
set @idoc_new = 0
end

SELECT *
INTO #tmpTable
FROM OPENXML (@idn, '/*[local-name()=''Sanofi'']/*[local-name()=''Content'']', 2)
WITH (
ProductCode varchar(100) './*[local-name()=''ProductCode'']',
ProductName varchar(100) './*[local-name()=''ProductName'']',
ProductType varchar(100) './*[local-name()=''ProductType'']',
Material varchar(100) './*[local-name()=''Material'']',
MaterialType varchar(100) './*[local-name()=''MaterialType'']',
Version varchar(100) './*[local-name()=''Version'']',
Requester varchar(100) './*[local-name()=''Requester'']',
ReasonforChange varchar(100) './*[local-name()=''ReasonforChange'']',
PackType varchar(100) './*[local-name()=''PackType'']'
)

select * from #tmpTable
drop table #tmpTable

if @idoc_new = 1
begin
EXEC sp_xml_removedocument @idn
end

'ms-sql' 카테고리의 다른 글

ms-sql db Link  (4) 2010.10.18
ms-sql 2005 설치  (1) 2010.10.18
SQL 서버의 잠금에 대한 고찰  (1) 2010.09.10
CTE 방식으로 게시판 List Data가져오기  (3) 2010.09.10
CTE 정렬방법  (0) 2010.09.10
Posted by 정광원
,

잠금에 관한 고찰(1) - 잠금(Lock) 매커니즘에 대하여
- http://kuaaan.tistory.com/97
잠금에 관한 고찰(2) - 격리 수준(Transaction Isolation Level)에 대하여
- http://kuaaan.tistory.com/98
잠금에 관한 고찰(3) - 교착상태(데드락,DeadLock)에 대하여
- http://kuaaan.tistory.com/100 

'ms-sql' 카테고리의 다른 글

ms-sql 2005 설치  (1) 2010.10.18
OPENXML(MS-SQL SP)  (1) 2010.10.18
CTE 방식으로 게시판 List Data가져오기  (3) 2010.09.10
CTE 정렬방법  (0) 2010.09.10
ms-sql 2008 설치  (1) 2010.09.09
Posted by 정광원
,

CREATE PROCEDURE [dbo].[UP_GIFT_Corporation_List]
(  
    @CurrentPageIndex           INT      -- 목록의 현재페이지 번호      
,   @PageSize                   INT      -- 목록의 한 페이지에 표현되는 글 목록수 
,   @SearchCondition            varchar(4000)           -- 조회조건 내용       
, @SortCondition    NVARCHAR(100)   -- 조회정렬 조건
, @Lang      NVARCHAR(10)   -- 언어
)  
AS 
SET NOCOUNT ON

DECLARE @StNum                  int  
SET     @StNum                  = (@PageSize * (@CurrentPageIndex - 1)) + 1  
DECLARE @FnNum                  int  
SET     @FnNum                  = @PageSize * @CurrentPageIndex  
DECLARE @SqlString              nvarchar(4000)   
DECLARE @SqlTotalRowCount       nvarchar(4000) 
DECLARE @ISChangeYN             char(1) 

SET @ISChangeYN = 'N'
IF charindex('Name',@SortCondition)+charindex('CATEGORY_NAME',@SortCondition)+charindex('PSEngName',@SortCondition) > 0
BEGIN
 SET @ISChangeYN = 'Y'
END

IF @ISChangeYN = 'N'
BEGIN
 SET @SortCondition = 'C.'+@SortCondition
END

SET     @SqlString = '  
WITH ORIGINAL_DATA AS ( 
SELECT 
 C.CPGUID
 ,C.TypeCD
 ,cg.CATEGORY_NAME as Type
 ,C.CPEngName
 ,C.PSGUID
 ,V.PSEngName
 ,C.CountryCD
 ,N.Name as Country
 ,C.Tel
 ,CONVERT(VARCHAR(10), C.ModifyDT, 120) as ModifyDT
 ,ROW_NUMBER() OVER(ORDER BY '+ @SortCondition+ ') AS RowNo 
FROM        dbo.TB_GIFT_Corporation  C
  LEFT OUTER JOIN dbo.TB_GIFT_VIPPerson V
  ON C.PSGUID = V.PSGUID
  LEFT OUTER JOIN CmnMgt.dbo.tb_Nation N
  ON C.CountryCD = N.ID
  LEFT OUTER JOIN CmnMgt.dbo.tb_Category Cg
  ON C.TypeCD = Cg.CATEGORY_CODE
WHERE   C.Active = ''Y'' '

SET @sqlTotalRowCount = '
SELECT
        COUNT(*) AS TOTAL_ROW_CNT
FROM        dbo.TB_GIFT_Corporation  C
  LEFT OUTER JOIN dbo.TB_GIFT_VIPPerson V
  ON C.PSGUID = V.PSGUID
  LEFT OUTER JOIN CmnMgt.dbo.tb_Nation N
  ON C.CountryCD = N.ID
  LEFT OUTER JOIN CmnMgt.dbo.tb_Category Cg
  ON C.TypeCD = Cg.CATEGORY_CODE
WHERE   C.Active = ''Y'' '


SET  @SqlString = @sqlString + @SearchCondition  
SET  @SqlTotalRowCount = @SqlTotalRowCount + @SearchCondition  

SET @SqlString = @SqlString + ' 

 
SELECT * FROM ORIGINAL_DATA WHERE RowNo BETWEEN ' + CONVERT( varchar, @StNum ) + ' AND ' + CONVERT(varchar, @FnNum)  

PRINT  @SqlString

exec sp_executesql @SqlString

exec sp_executesql @SqlTotalRowCount

'ms-sql' 카테고리의 다른 글

OPENXML(MS-SQL SP)  (1) 2010.10.18
SQL 서버의 잠금에 대한 고찰  (1) 2010.09.10
CTE 정렬방법  (0) 2010.09.10
ms-sql 2008 설치  (1) 2010.09.09
프로시져에서 Identity값 Return하기  (1) 2010.09.09
Posted by 정광원
,

CTE 정렬방법

ms-sql 2010. 9. 10. 09:58


WITH List_CTE AS (
SELECT Convert(NVARCHAR(255), NWMGUID) AS Sort  
 ,N.No
 ,N.NWMGUID
 ,N.ParentID
 ,N.Depth
 ,N.Date
 ,N.TypeCD
 ,N.Title
 ,N.PGGUID
 ,N.ModifyDT
FROM TB_GIFT_NWMeeting N
WHERE NWMGUID = @NWMGUID
UNION ALL
SELECT Convert(NVARCHAR(255),RTRIM(pf.Sort) + Convert(NVARCHAR(255),ROW_NUMBER() OVER(ORDER BY N.No desc))) AS Sort --정렬할값을 만들어준다.
 ,N.No
 ,N.NWMGUID
 ,N.ParentID
 ,N.Depth
 ,N.Date
 ,N.TypeCD
 ,N.Title
 ,N.PGGUID
 ,N.ModifyDT
FROM TB_GIFT_NWMeeting N
INNER JOIN List_CTE pf
ON pf.NWMGUID  = N.ParentID
AND N.Active='Y'
)

SELECT L.Sort
 ,(Select COUNT(*) from TB_GIFT_NWMeeting N where N.ParentID = L.NWMGUID) as Count
 ,(SELECT COUNT(*)-1 FROM TB_GIFT_SKAttendant SK WHERE SK.Type ='A' AND SK.ParentID = L.NWMGUID  ) as UserCount
 ,(SELECT  TOP 1 tul.Name FROM dbo.TB_GIFT_SKAttendant sk
  LEFT OUTER JOIN CmnMgt.dbo.tb_User tu
  ON sk.UserID = tu.UserID
  AND sk.Type ='A'
  LEFT OUTER JOIN CmnMgt.dbo.tb_Userlang tul
  ON tu.UserID = tul.UserID AND tul.LangID =@Lang
 WHERE SK.ParentID = L.NWMGUID ORDER BY SK.SEQ ASC) AS UserName
 ,L.No
 ,L.NWMGUID
 ,L.ParentID
 ,L.Depth
 ,L.Date
 ,L.TypeCD
 ,CATEGORY_Name as Type
 ,L.Title
 ,L.PGGUID
 ,P.PGName
 ,CONVERT(VARCHAR(10), L.ModifyDT, 120) as ModifyDT
 FROM List_CTE L
LEFT OUTER JOIN CmnMgt.dbo.tb_Category cg
ON L.TypeCD = cg.CATEGORY_CODE 
LEFT OUTER JOIN TB_GIFT_Program P
ON L.PGGUID = P.PGGUID
WHERE ParentID is not null
ORDER BY Sort

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ko/s10de_6tsql/html/27cfb819-3e8d-4274-8bbe-cbbe4d9c2e23.htm
6번 참고

Posted by 정광원
,

ms-sql 2008 설치

ms-sql 2010. 9. 9. 15:58

'ms-sql' 카테고리의 다른 글

SQL 서버의 잠금에 대한 고찰  (1) 2010.09.10
CTE 방식으로 게시판 List Data가져오기  (3) 2010.09.10
CTE 정렬방법  (0) 2010.09.10
프로시져에서 Identity값 Return하기  (1) 2010.09.09
value값 구분자 넣어서 자르기  (3) 2010.09.09
Posted by 정광원
,