CTE (Common Table Expression)
말이 필요 없지 설명은 위의 링크에서
이런 테이블(2316890 건의 데이타가 있다) 을 페이징을 한다면...
그리고 글번호를 붙인다면...
여태까지는 쪼인을 해서 이리 했다면;;;;
CTE 를 사용해서..
이처럼 간단하게..
temp 가 일종의 태이블 변수가 되는것이다..
하지만 주의 할점..
한번 만들고 꼭 한번만 사용할 수 있다는 거!!!
확장 속성을 사용하여 데이터베이스 개체 또는 데이터베이스 자체의 속성으로 설명이나 지시 등의 텍스트, 입력 마스크 및 형식 지정 규칙을 추가할 수 있습니다. 예를 들어 스키마, 스키마의 뷰 또는 뷰의 열에 확장 속성을 추가할 수 있습니다. 데이터베이스에 확장 속성이 저장되기 때문에 속성을 읽는 모든 응용 프로그램에서 개체를 같은 방식으로 평가할 수 있습니다. 따라서 시스템의 모든 프로그램에서 데이터를 일관된 방식으로 처리할 수 있습니다.
다음과 같은 작업에 확장 속성을 사용할 수 있습니다.
http://msdn.microsoft.com/ko-kr/library/ms190243.aspx
그냥 쉬운예 하나..
테이블의 해당 컬럼에 설명 달기..
EXEC sys.sp_addextendedproperty @name = N'MS_Description' , @value = N'이메일' -- //설명 , @level0type = N'SCHEMA' , @level0name = N'dbo' , @level1type = N'TABLE' , @level1name = N'TB_FreeBoard' -- //테이블 , @level2type = N'COLUMN' , @level2name = N'Email' -- //컬럼명
FROM 절이 생성한 결과 집합을 ROW_NUMBER 함수가 적용되는 파티션으로 나눕니다. PARTITION BY 구문은 OVER 절(Transact-SQL)을 참조하십시오.
파티션에서 ROW_NUMBER 값이 행에 할당되는 순서를 결정합니다. 자세한 내용은 ORDER BY 절(Transact-SQL)를 참조하십시오. 순위 함수에 <order_by_clause>가 사용된 경우 정수는 열을 나타낼 수 없습니다.
참고: |
---|
OVER 절의 ORDER BY 는 ROW_NUMBER 를 정렬합니다. 'Row Number' 가 아닌 열 기준으로 정렬하는 SELECT 문에 ORDER BY 절을 추가하면 결과 집합은 외부 ORDER BY 를 기준으로 정렬됩니다. |
다음 예에서는 연간 판매 실적에 따라 AdventureWorks
의 영업 사원에 대한 ROW_NUMBER
를 반환합니다.
USE AdventureWorks; GO SELECT c.FirstName, c.LastName ,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number' ,s.SalesYTD, a.PostalCode FROM Sales.SalesPerson s INNER JOIN Person.Contact c ON s.SalesPersonID = c.ContactID INNER JOIN Person.Address a ON a.AddressID = c.ContactID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0;
다음 예에서는 행 번호 50
부터 60
까지의 행을 OrderDate
순으로 반환합니다.
USE AdventureWorks; GO WITH OrderedOrders AS ( SELECT SalesOrderID, OrderDate, ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' FROM Sales.SalesOrderHeader ) SELECT * FROM OrderedOrders WHERE RowNumber BETWEEN 50 AND 60;
다음 예에서는 PARTITION BY
인수를 사용하는 방법을 보여 줍니다.
USE AdventureWorks; GO SELECT c.FirstName, c.LastName ,ROW_NUMBER() OVER (PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Row Number' ,s.SalesYTD, a.PostalCode FROM Sales.SalesPerson s INNER JOIN Person.Contact c ON s.SalesPersonID = c.ContactID INNER JOIN Person.Address a ON a.AddressID = c.ContactID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0;
** 커서 **
쿼리 문법에 의해 데이타를 처리할 때, 보통은 한꺼번에 실행을 하게 된다.
커서란, 한줄씩 처리 하려고 할때 쓰인다
형식)
declare 이름 scroll cursor for 구문 for
예)
-- //커서의 정의 DECLARE myCursor scroll CURSOR FOR SELECT * FROM Table FOR READ ONLY -- //커서 오픈 OPEN myCursor -- //커서가 열린 상태를 알려주고 테리블의 행의 갯수를 반환 SELECT @@cursor_rows DECLARE @i INT SET @i = 0 WHILE @i < @@cursor_rows BEGIN -- 커서의 처음 것(한줄씩 읽어 나간다) fetch next from myCursor -- 0이면 수행성공,-1이면 결과가 범위 밖,-2면 값이 없음 select @@fetch_status SET @i = @i + 1 END /* -- //지금 커서의 전에 것 fetch prior from myCursor select @@fetch_status -- //첫번째 fetch first from myCursor select @@fetch_status -- //마지막 fetch last from myCursor select @@fetch_status */ -- //열린 커서를 닫는다 close myCursor -- //커서참조를 제거. 이거를 실행하면 재 오픈 할수 없고 다시 정의 해야한다 deallocate myCursor
-->> Date 시간에 원하는 시간을 더해서 반환
Type
year , yy, y
month, m, mm
day, d, dd
week, w, wk
hour, hh
minute, m
second, s, ss
millisecond, ms
Add
Type 에 따른 값. dateadd(year, 1 입력시 1년 추가.
Date 추가할 기준 시간
2008-10-10 or 2008-10-10 20:00:00 의 datetime or smalldatetime 형식
CREATE SYNONYM [dbo].[obj] --사용할 디비 FOR [db].[dbo].[obj]--대상디비