블로그 이미지
정홍주
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 31    

Notice

2016.06.02 13:02 SQL

 

SQL Server 2016 릴리즈

 

61일부로 SQL Server 2016 이 릴리즈되었습니다. 인메모리 프로세싱, 보안, 성능, 인데이터베이스 고급 분석, 모바일 BI 등의 기능이 강화되었습니다.

https://www.microsoft.com/ko-kr/server-cloud/products/sql-server-2016/

 

SQL Server Reporting Services 2016의 모바일 BI는 손쉽고 강력하게 이동성을 제공해줄 수 있습니다. Power BI 모바일 앱에서도 액세스 가능하여 더 강점을 제공하고 있습니다.

 

SQL Server 2016MSDN 구독 사이트 또는 평가판 사이트에서 다운로드 할 수 있습니다.

https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016

 

Azure 가상 컴퓨터의 이미지에서도 SQL Server 2016을 제공하고 있습니다.

 

 

신고

'SQL' 카테고리의 다른 글

SQL Server 2016 릴리즈  (0) 2016.06.02
SQL Server 2016 강화된 T-SQL (1)  (0) 2016.04.08
Windows Azure 저장소로 백업  (0) 2013.10.21
PASS Summit 2013  (1) 2013.10.16
SQL Server 2012 T-SQL New Feature – EOMONTH  (0) 2013.01.16
SQL PASS Summit 2012  (0) 2012.11.08
posted by 정홍주
2016.04.08 08:00 SQL

 

SQL Server 2016 강화된 T-SQL (1)

 

REST API 등에서 XML보다는 JSON 을 아주 많이 사용하고 있는 상황입니다. 그래서 SQL Server 2016에서는 T-SQL JSON 이 지원됩니다. FOR XML 구문처럼 FOR JSON 구문으로 결과셋을 JSON 구문으로 변환해줍니다. SELECT 결과를 JSON 구문으로 또는 JSON 문자열을 SELECT 결과처럼 바꿔주는 등 아래와 같은 내용을 제공하고 있습니다. 간략히 FOR JSONOPENJSON을 살펴보겠습니다. JSON 지원은 Azure SQL Database, SQL Server 2016에서 지원하고 있습니다.

FOR JSON

OPENJSON

JSON 함수(ISJSON, JSON_VALUE, JSON_QUERY, JSON_MODIFY )

 

FOR JSON 구문에서는 AUTO, PATH 등을 사용할 수 있습니다. 간략히 FOR JSON AUTO 구문을 실행해보면 아래와 같은 결과를 확인할 수 있습니다.

FOR XML 구문과 유사하며 링크를 클릭해서 결과를 보면 JSON 구문인 것을 확인할 수 있습니다.

위 구문을 MVC 등에서 JSON 결과로 처리할 때 사용할 수는 있겠지만 FOR JSON 구문을 간략히 살펴보았습니다.

 

OPENJSON 구문은 JSON 문자열을 SELECT 결과셋으로 변경해주는 구문으로 OPENXML 구문과 비슷합니다.

아래 그림처럼 JSON 문자열이 응용프로그램에서 넘어왔을 경우 OPENJSON 으로 간단히 변경해줄수 있습니다.

간략히 SQL Server 2016T-SQL에서 JSON의 지원을 살펴보았습니다.

 

신고

'SQL' 카테고리의 다른 글

SQL Server 2016 릴리즈  (0) 2016.06.02
SQL Server 2016 강화된 T-SQL (1)  (0) 2016.04.08
Windows Azure 저장소로 백업  (0) 2013.10.21
PASS Summit 2013  (1) 2013.10.16
SQL Server 2012 T-SQL New Feature – EOMONTH  (0) 2013.01.16
SQL PASS Summit 2012  (0) 2012.11.08
posted by 정홍주
2013.10.21 08:30 SQL

 

Windows Azure 저장소로 백업

 

SQL Server를 백업하면 bak 파일이 생성되는데 bak 파일 저장하는 것도 애매합니다. 같은 서버에 둘 수 없고 다른 건물에 두거나 해야 하는데 일반 기업에서는 만만치 않은 일입니다. 

SQL Server 2012 SP1 CU2 에서는 Windows Azure 저장소로 백업이 가능하므로 클라우드에 백업 파일을 저장해서 관리의 효율성을 얻을 수 있습니다.

관련된 링크는 아래 주소를 참고해보십시오.

http://technet.microsoft.com/ko-kr/library/jj919148.aspx

http://blogs.technet.com/b/keithmayer/archive/2013/03/15/tired-of-tapes-backup-your-sql-databases-to-the-cloud.aspx#.UmcDLWaweM9

 

0.     먼저 SQL Server에서 SELECT @@VERSION을 실행해서 11.0.3339 인지 확인합니다.

SELECT @@VERSION

1.     Windows Azure 관리 포털로 이동하여 저장소를 생성합니다. 그리고 저장소에 컨테이너를 mycontainer 라는 이름으로 생성합니다. (Windows Azure 구독이 없다면 미리 생성해야 합니다.)

2.     준비가 되었다면 SQL Server에서 Credential 을 생성하여 백업 구문에서 사용하게 됩니다.

IF NOT EXISTS

(SELECT * FROM sys.credentials

WHERE credential_identity = 'mycredential')

CREATE CREDENTIAL mycredential WITH IDENTITY = 'mystorageaccount'

,SECRET = '<storage access key>' ;

 

3.     아래와 같은 구문을 실행하면 백업이 생성되는 것을 확인 가능합니다.

BACKUP DATABASE AdventureWorks2012

TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'

      WITH CREDENTIAL = 'mycredential'

     ,COMPRESSION

     ,STATS = 5;

GO 

 

 

4.     Windows Azure의 저장소로 이동해보면 백업 파일이 생성된 것을 확인 가능합니다.

 

5.     전체백업뿐만 아니라 로그 백업, 차등 백업 등도 가능합니다.

6.     위 작업은 T-SQL 구문으로 실행했지만 C#이나 PowerShell로도 가능합니다.

7.     비상로그 백업을 받고 복원 구문은 아래와 같으며 MOVE, STOPAT 등의 옵션도 동일합니다.

 

기존 백업 구문으로 Windows Azure 저장소에 SQL Server 데이터베이스 백업과 복원에 대해서 간략히 살펴보았습니다.

 

신고

'SQL' 카테고리의 다른 글

SQL Server 2016 릴리즈  (0) 2016.06.02
SQL Server 2016 강화된 T-SQL (1)  (0) 2016.04.08
Windows Azure 저장소로 백업  (0) 2013.10.21
PASS Summit 2013  (1) 2013.10.16
SQL Server 2012 T-SQL New Feature – EOMONTH  (0) 2013.01.16
SQL PASS Summit 2012  (0) 2012.11.08
posted by 정홍주
2013.10.16 23:25 SQL

 

PASS Summit 2013

 

PASS Summit 2013이 노스캐롤라이나에 있는 샬럿에서 열리고 있습니다. 라이브 사이트를 제공하니 아래 링크를 참조하시면 도움이 될 것 같습니다.

http://www.sqlpass.org/summit/2013/Live.aspx

 

 

Day 1 Keynote

첫 번째 날 아침의 Keynote를 보면 상당한 정보를 얻을 수 있는데 주제는 Hybrid Cloud 입니다.

l  SQL Server 2014의 인메모리 OLTP

l  클라우드로의 백업

l  Power BI

 

그리고 SQL Server 2014 CTP2가 공지되었으니 다운로드 받아 사용해볼 수 있습니다. 그리고 Windows Azure의 가상 컴퓨터 갤러리에도 업데이트되어 SQL Server 2014 CTP2 이미지를 보실수 있습니다.

http://technet.microsoft.com/en-gb/evalcenter/dn205290.aspx

 

 

전시장

MS 부스에서는 서피스, Power Map 등등 그리고 HortonWorks 등에 사람들이 상당히 많습니다.

Day 2 Keynote 

David DeWitt 교수의 Keynote가 있었는데 In Memory OLTP 에 대한 내용이었습니다. SQL Server 2014에 기본적으로 구성되어 있으며 Day 1에서의 Keynote에서 데모가 진행된 내용을 What, Why, How 로 쭉 설명이 있었습니다. 자세한 정보는 아래를 참고하실수 있습니다.

http://www.timeanddate.com/worldclock/fixedtime.html?msg=Keynote: Hekaton Why, What, and How by David DeWitt&iso=20131017T1215

 

 

 

 

 

 

신고

'SQL' 카테고리의 다른 글

SQL Server 2016 강화된 T-SQL (1)  (0) 2016.04.08
Windows Azure 저장소로 백업  (0) 2013.10.21
PASS Summit 2013  (1) 2013.10.16
SQL Server 2012 T-SQL New Feature – EOMONTH  (0) 2013.01.16
SQL PASS Summit 2012  (0) 2012.11.08
SQL Server 2012 T-SQL New Feature – ANY, SOME, ALL  (0) 2012.07.11
posted by 정홍주
TAG 정홍주
2013.01.16 22:07 SQL

날짜 관련 데이터를 구성할 때 SQL Server 2012EOMONTH 를 통해 간단히 구성할 수 있어 괜찮은 함수이며 T-SQL 새로운 함수의 포스팅에는 누락되어 있어 추가합니다.

사실 EOMONTHExcel 에서 제공되는 함수입니다.

 

 

SQLEOMONTH 에 대한 내용은 아래 링크를 참조하십시오.

http://msdn.microsoft.com/ko-kr/library/hh213020.aspx

 

구문을 실행해보면 결과를 바로 알 수 있습니다. 지정한 달 수의 이전이나 이후의 마지막 일자를 제공해줍니다.

이 함수를 사용 하지 않고 작업한다면 저번 달 마지막 일자는 오늘에 -1 MM 을 하고는 ‘-01’ 을 붙이고 다시 1 MM 을 하고 -1 dd 를 하는 식으로 해야 할 것 같은데 간단히 구성할 수 있어 알고 있으면 날짜 관련 데이터를 액세스 할 경우 도움이 될 것으로 보입니다.

 

DECLARE @date DATETIME = '1/16/2013‘;

SELECT EOMONTH ( @date ) AS Result;

--2013-01-31

 

DECLARE @date DATETIME = GETDATE();

SELECT EOMONTH ( @date ) ASThis Month’;

--2013-01-31

 

SELECT EOMONTH ( @date, 1 ) ASNext Month’;

--2013-02-28

 

SELECT EOMONTH ( @date, -1 ) ASLast Month’;

--2012-12-31

 

 

신고

'SQL' 카테고리의 다른 글

Windows Azure 저장소로 백업  (0) 2013.10.21
PASS Summit 2013  (1) 2013.10.16
SQL Server 2012 T-SQL New Feature – EOMONTH  (0) 2013.01.16
SQL PASS Summit 2012  (0) 2012.11.08
SQL Server 2012 T-SQL New Feature – ANY, SOME, ALL  (0) 2012.07.11
SQL Server 2012 코드 편집기 새 기능  (0) 2012.05.23
posted by 정홍주
2012.11.08 01:11 SQL

 

SQL PASS Summit 2012

SQL PASS Summit 이 올해도 시애틀에서 열리고 있습니다.
 

아래 주소를 통해서 온라인으로 Summit을 살펴볼 수 있습니다.

http://www.sqlpass.org/summit/2012/

 

 첫 번째 Keynote 에서는 Big Data 에 대한 내용을 통해 몇몇 FeatureAnnounce 했습니다
SQL Server 2012 SP 1이 나왔습니다.

 In-Memory DB 에 대한 내용까지도.., 

Hadoop 관련 HDInsight 은 이미 릴리즈되었죠.

SQL Server 2012 PDW 성능 비교가 와~
  

Power View Excel 2013 에서

신고
posted by 정홍주
2012.07.11 15:39 SQL

 

SQL Server 2012 T-SQL New Feature – ANY, SOME, ALL

 

먼저 SOME, ALL, ANY를 비교해보도록 하겠습니다.

좀 헤깔리는 내용이며 ANY는 기존의 EXISTS와 동일하게 사용이 가능합니다. 주의 깊게 사용하지 않을 경우는 잘못된 결과가 나올 수 있습니다.

 

 

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

위 구문의 결과는 1,2,3 이 나타납니다.

 

자 그럼 IF 문으로 EXISTS를 처리해보도록 하겠습니다.

 

 

IF EXISTS  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'EXISTS  IF'

ELSE

PRINT 'EXISTS  ELSE'

 

값이 존재하므로 무조건 EXISTS  IF 값이 출력됩니다.

 

여기에서 내부 쿼리의 값을 있는지 없는지가 아닌 정확한 값으로 비교하려면 어떻게 해야 할까요?

1 이 있는지, 2보다 작은 값이 있는지, 2보다 큰 값이 있는지 등등을 처리한다면 쿼리 문이 좀 많이 달라져야 할 것입니다. 아니면 괄호 안의 내부 쿼리가 변경되어야 합니다.

 

ALL을 한번 사용해보도록 하겠습니다.

 

IF 2= ALL  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'ALL IF'

ELSE

PRINT 'ALL ELSE'

 

ALL ELSE 가 반환됩니다. 전부 만족하지 않기 때문이죠

 

IF 2<= ALL  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'ALL IF'

ELSE

PRINT 'ALL ELSE'

 

ALL  ELSE 가 반환됩니다. 마찬가지로 전부 만족하지 않기 때문입니다.

 

 

IF 0<= ALL  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'ALL IF'

ELSE

PRINT 'ALL  ELSE'

 

1,2,3 0 보다 크므로 전부 만족하여 ALL  IF 가 반환됩니다.

 

 

SOME 을 한번 사용해보도록 하겠습니다.

IF 2= SOME  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'SOME IF'

ELSE

PRINT 'SOME ELSE'

 

1,2,3 중에서 2 와 같은 것이 있으므로 만족하여 SOME  IF 가 반환됩니다.

 

IF 2<= SOME  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'SOME IF'

ELSE

PRINT 'SOME ELSE'

 

1,2,3 의 일부는 2 보다 크거나 같으므로 만족하여 SOME  IF 가 반환됩니다.

 

IF 3< SOME  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'SOME  IF'

ELSE

PRINT 'SOME  ELSE'

 

3 보다 큰 값이 없으므로 SOME  ELSE 가 반환됩니다.

 

 

ANY 을 한번 사용해보도록 하겠습니다. SOME과 동일하다는 것을 알 수 있습니다.

 

IF 2= ANY  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'ANY  IF'

ELSE

PRINT 'ANY  ELSE'

 

2 가 있으므로 ANY  IF 가 반환됩니다.

 

IF 2<= ANY  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'ANY  IF'

ELSE

PRINT 'ANY  ELSE'

 

2 보다 작은 값이 있으므로 ANY  IF 가 반환됩니다.

 

IF 3< ANY  (

  SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee]

   WHERE [BusinessEntityID] IN (1,2,3)

)

PRINT 'ANY  IF'

ELSE

PRINT 'ANY  ELSE'

 

3 보다 크지 않으므로 ANY  ELSE 가 반환됩니다.

 

간략히 알아보았으며 이중 ANYSOME의 경우는 EXISTS와 실행 계획이 동일하게 동작됩니다.

쿼리 문을 변경하여 아래와 같은 쿼리를 실행해봅니다.

 

 

SELECT  FirstName, LastName

FROM [Person].[Person] p

WHERE EXISTS (

 SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee] e

   WHERE [VacationHours]=99 AND p.BusinessEntityID=e.BusinessEntityID

)

 

결과는 아래와 같이 3 사람이 반환 됩니다.

 

/*

Ken     Sánchez

Betsy   Stadick

Chad   Niswonger

*/

 

위 쿼리에서 ANY, SOME를 사용해도 똑 같은 값이 나오며 실행계획을 비교해보면 똑같습니다.

 

SELECT  FirstName, LastName

FROM [Person].[Person] p

WHERE [BusinessEntityID] =ANY (

 SELECT [BusinessEntityID]

   FROM [HumanResources].[Employee] e

   WHERE [VacationHours]=99

)

 

 

ANY, SOME, ALL 등은 아래 내용을 참조할 수 있습니다.

http://msdn.microsoft.com/ko-kr/library/ms188336.aspx

http://msdn.microsoft.com/ko-kr/library/ms175064

 

신고
posted by 정홍주
2012.05.23 08:30 SQL

SQL Server 2012 코드 편집기 새 기능 

Visual Studio 에서는 snippet- 코드조각이라는 기능이 있습니다. 미리 등록된 내용 외에 xml 파일을 따로 작성해서 추가해서 코드 작성이 사용합니다. C# 코드에서는 아래와 같이 보이게 됩니다.

 

For 가 선택된 상황에서 탭을 누르면 변수 i를 다른 값으로 변경하고 탭을 누르면 length로 이동해서 변경할 수 있어 코드 작성시 잘 사용하면 도움이 됩니다.

 

코드조각 삽입 없이 For 를 쳐도 아이콘이 위와 같이 나오고 탭으로 코드 조각을 사용하게 됩니다.

또한 If 문 등으로 코드를 감싸주는 코드 감싸기도 제공되고 있습니다.

if (true)

{

for (int iValue = 0; iValue < length; iValue++)

{

 

} 

}

 

Visual Studio 에서의 코드 조각 단축키는 Ctrl+K, X 이며 코드 감싸기는 Ctrl+K, S 입니다. 편집 메뉴의 IntelliSense 메뉴에서 선택할 수 도 있습니다.

 

위와 같은 내용은 SQL Server 2012 Management Studio에서도 제공됩니다. 단축키도 똑 같습니다.

SQL 쿼리 작성기에서 Ctrl+K, X 를 해보도록 하겠습니다. 또는 마우스를 오른쪽 클릭해도 메뉴(코드 조작 삽입)를 볼 수 있습니다. SQL Server 개체들이 나타납니다.

 

이중에서 저장 프로시저를 선택하고 탭을 누르면 프로시저 만들기 코드 조각을 볼 수 있는데 프로시저 기본 템플릿 만들기를 선택해보도록 하겠습니다. 엔터를 사용하지 말고 탭으로 작업하면 됩니다.

CREATE PROCEDURE dbo.Sample_Procedure

    @param1 int = 0,

    @param2 int 

AS

    SELECT @param1,@param2

RETURN 0

 

dbo에서 커서가 멈춰있게 되는데 스키마를 변경하려면 변경하고 탭으로 저장 프로시저 이름으로 이동해서 수정합니다. 그리고 탭으로 이동하여 Param1을 변경하면 SELECT 구문에서도 Param1이 자동으로 변경됩니다. 쿼리 문으로 저장 프로시저 등 개체를 생성할 때 손쉽게 작업이 가능하다는 것을 알 수 있습니다.

CREATE PROCEDURE dbo.usp_GetProducts

    @ProductID int = 0 

AS

    SELECT @ProductID

RETURN 0

 

다음은 코드 감싸기를 한번 알아보도록 하겠습니다. 코드 감싸기는 IF, WHILE, BEGIN 을 제공해줍니다. 블럭으로 감싸주는 것입니다. 마우스로 감쌀 부분을 선택하고 오른쪽 클릭하면 코드 감싸기 메뉴를 볼 수 있습니다.

 

코드 감싸기를 선택하면 코드 조각이 나타나며 원하는 내용을 선택하면 됩니다. 

Begin 조각을 선택하면 아래와 같은 결과를 볼 수 있습니다.

BEGIN

 

 

SELECT *

FROM [Production].[Product]

 

END

 

IF 조각을 선택하면 아래와 같은 결과를 볼 수 있습니다. WHILE 도 유사합니다.

IF( 조건 )

BEGIN

 

SELECT *

FROM [Production].[Product] 

 

END

 

중간에 있는 구문이 들여쓰기가 되는 것은 아니라 좀 그렇지만 긴 라인의 경우 코드 감싸기를 통해서 쿼리 문을 리팩토링할 때 좋은 기능이니 참고하시면 좋을 것 같습니다.

 

 

 

신고
posted by 정홍주
2012.05.16 08:30 SQL

SQL Server 2012 T-SQL New Feature – FIRST_VALUE, LAST_VALUE

 

SQL Server 2012에서 새롭게 제공되는 분석 함수 중에서 LAG, LEAD에 대한 내용을 살펴보았는데 이번에는 정렬된 값 집합의 첫번째 값과 마지막 값을 반환하는 함수를 알아보겠습니다.

FIRST_VALUE, LAST_VALUE 함수를 사용하면 어떤 시나리오에서는 손쉽게 원하는 결과를 구할 수 있을 것 같습니다.

 

먼저 FIRST_VALUE의 구문은 아래와 같습니다.

FIRST_VALUE ( [scalar_expression )

    OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

간단한 예를 보는 것이 이해하기 훨씬 나을 듯 합니다. 아래 쿼리의 결과를 보시면 제품이름과 카테고리, 가격이 나타납니다.

SELECT Name,  [ProductSubcategoryID], [ListPrice]

FROM [Production].[Product]

WHERE [ProductSubcategoryID] IS NOT NULL

ORDER BY [ProductSubcategoryID], [ListPrice] 

 

 

추가로 위의 결과에 가장 낮은 가격과 가장 높은 가격을 나타내려면 서브 쿼리로 MAX, MIN을 사용할 수 있을 것입니다. 정렬된 결과 집합에 대한 최소가격의 경우 쿼리가 조인되고 필터 조건이 복잡하다면 쿼리 문이 복잡해지게 됩니다. FIRST_VALUE를 이용해서 가장 낮은 가격을 구하는 내용을 추가해보도록 하겠습니다.

SELECT Name,  [ProductSubcategoryID], [ListPrice]

, FIRST_VALUE( [ListPrice]) OVER (ORDER BY ListPrice ASC)

FROM [Production].[Product]

WHERE [ProductSubcategoryID] IS NOT NULL

ORDER BY [ProductSubcategoryID], [ListPrice] 

 

 

FIRST_VALUE 구문에서도 보는 것처럼 FIRST_VALUE 다음에 나타낼 값에 대한 열을 사용하고 OVER 구문에서 ORDER BY, PARTITION BY 를 사용할 수 있습니다. 아래는 카테고리별 분할된 내용에 대한 최소 가격과 최대 가격을 나타내는 구문입니다.

SELECT Name,  [ProductSubcategoryID],[ListPrice]

, FIRST_VALUE( [ListPrice]) OVER (PARTITION BY [ProductSubcategoryID] ORDER BY [ProductSubcategoryID] ) AS FirstValue

, LAST_VALUE( [ListPrice]) OVER (PARTITION BY [ProductSubcategoryID] ORDER BY [ProductSubcategoryID] ) AS LastValue

FROM [Production].[Product]

WHERE [ProductSubcategoryID] IS NOT NULL

ORDER BY [ProductSubcategoryID], [ListPrice] 

 

 

간략히 분석 함수 중에서 FIRST_VALUE, LAST_VALUE를 살펴보았습니다. 서브 쿼리로도 해결 가능하겠지만 특정 시나리오에서는 FIRST_VALUE, LAST_VALUE를 통해 간결하고 손쉽게 해결할 수 있습니다. 보다 더 자세한 내용은 아래 링크를 참고하실 수 있습니다. 

l  FIRST_VALUE(Transact-SQL)

http://msdn.microsoft.com/ko-kr/library/hh213018

l  LAST_VALUE(Transact-SQL)

http://msdn.microsoft.com/ko-kr/library/hh231517

 

 

신고
posted by 정홍주
2012.05.09 11:55 SQL

SQL Server 2012 FileTable

SQL Server 2012에서는 FileTable 기능을 제공하고 있습니다. 파일 및 문서를 SQL Server FileTable에 저장하지만 Windows 탐색기에서는 기존에 쓰던 그대로 복사, 수정, 삭제가 가능하며 비트랜잭션 액세스가 가능합니다. 많은 기능이 있지만 일단 간략히 어떤 것인지 살펴보도록 하겠습니다. 파일이나 문서 콘텐트를 관리할 경우 더 많은 이점을 제공할 것으로 보입니다.

관련 링크는 아래를 참고하십시오.

http://msdn.microsoft.com/ko-kr/library/ff929144.aspx 

l  FileTable 사용하도록 설정

-       FileTable SQL ServerFILESTREAM 기능을 확장합니다. 그러므로 먼저 FILESTREAM 을 사용하도록 설정되어야 합니다.

-       먼저 FileTable 사용하도록 데이터베이스 수준에서 설정을 해야 합니다. 데이터베이스를 만들면서 해도 되며 기존 데이터베이스에 설정해도 됩니다.

CREATE DATABASE FileContent

  WITH FILESTREAM

  ( NON_TRANSACTED_ACCESS = FULL,

    DIRECTORY_NAME = N’FileTablelAccess'

  );

GO

 

-       데이터베이스에 FILESTREAM 파일 그룹이 있어야 합니다. 그래서 아래 구문을 실행해줍니다.

ALTER  DATABASE FileContent

  ADD FILEGROUP FileContent_FG

  CONTAINS FILESTREAM;

GO

 

ALTER DATABASE FileContent

ADD FILE

(

    NAME= 'FileContent_Demo',

    FILENAME = 'C:\FileContent\FileContent_Demo'

)

TO FILEGROUP FileContent_FG;

GO

  

l  FileTable 만들기

-       FileTable을 생성합니다.

USE FileContent;

GO

 

CREATE TABLE ImageFiles AS FILETABLE

  WITH

  ( FILETABLE_DIRECTORY = 'ImageTable',

    FILETABLE_COLLATE_FILENAME = database_default

  );

GO

-       결과는 아래와 같습니다. 테이블 스키마는 미리 고정된 스키마입니다. 별도로 열을 추가할 수는 없습니다.

 

-       실제 파일 폴더는 공유 UNC 경로로 액세스 할 수 있습니다.

\\컴퓨터이름\MSSQLSERVER\FileTablelAccess\ImageTable

공유 폴더에 파일을 아래와 같이 복사만 했습니다. 

 

l  Select

-       결과를 Select 해보면 위에서 복사한 내용이 그대로 결과에 반영되어 있습니다. 

 

l  FileTable 만들기에 대한 요구 사항 및 제한 사항

-       기존 테이블을 변경하여 FileTable로 변환할 수 없습니다.

-       데이터베이스 수준에서 이전에 지정된 디렉터리에 null이 아닌 값이 있어야 합니다.

-       FileTable에는 FILESTREAM 열이 포함되어 있으므로 FileTable에는 유효한 FILESTREAM 파일 그룹이 있어야 합니다. 데이터베이스에 FILESTREAM 파일 그룹이 없으면 오류가 발생합니다.

-       TABLE…AS FILETABLE CREATE 문의 일부로 테이블 제약 조건을 만들 수 없습니다.그러나 ALTER TABLE 문을 사용하여 나중에 제약 조건을 추가할 수 있습니다.

-       tempdb 데이터베이스나 다른 시스템 데이터베이스에는 FileTable을 만들 수 없습니다.

-       FileTable을 임시 테이블로 만들 수 없습니다.

 

이상으로 간단히 살펴보았으며 위 내용은 가장 기본적이며 추가적으로 대량 로드나 변경, 삭제, 파일 IO API 등의 여러 내용이 있습니다. 그리고 데이터베이스를 백업하면 파일 관련 데이터가 같이 백업됩니다.

 

 

신고
posted by 정홍주
prev 1 2 3 next

티스토리 툴바