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

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.21 08:40 SharePoint/SharePoint 2010

 

SQL Server 2012 Reporting Services – SharePoint 

가상 환경에서는 PowerView를 핸들링하고 다루어 보았는데 실제 설치해서 관련 내용을 한번 알아보도록 하겠습니다. SharePoint Mode에서는 SQL Reporting Services SharePoint의 서비스 응용프로그램으로 들어와 있습니다.

 

먼저 Topology 와 설치에 대한 내용은 아래 그림을 참고하실 수 있습니다.

 

출처 http://msdn.microsoft.com/en-us/library/hh479775

 

Single Farm에 구성하는 내용은 아래 링크를 참조하실 수 있습니다.

http://msdn.microsoft.com/en-us/library/gg492276

 

Reporting Services – SharePoint 를 설치하기 위해서는 SQL Server 2012 를 통해 설치가 진행됩니다.
 

위 내용으로 구성하고 SharePoint 2010 Management Shell을 관리자 권한으로 실행하여 아래와 같은 명령을 실행합니다.

 

Install-SPRSService

 

Install-SPRSServiceProxy

 

get-spserviceinstance -all |where {$_.TypeName -like "SQL Server Reporting*"} | Start-SPServiceInstance

 

위 명령을 실행하면 서비스 응용 프로그램 만들기 메뉴에서 SQL Server Reporting Services 가 나타납니다. 세 번째 명령은 서비스를 시작하는 내용입니다.

 

중앙 관리로 이동합니다.

서버의 서비스 관리를 살펴보면 SQL Server Reporting Services 서비스를 볼 수 있습니다.
 

서비스 응용 프로그램 관리로 이동해보면 SQL Server Reporting Services 서비스 응용 프로그램을 확인할 수 있습니다.
 
 

사이트 모음에서는 리포팅 관련 기능을 활성화 할 수 있습니다.

SQL Server 2012 Reporting Services SharePoint Mode의 경우는 SharePoint 2010의 서비스 응용 프로그램 관리로 들어와 있는 것을 확인 가능합니다.

신고
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 정홍주
2012.05.02 08:30 SQL

SQL Server 2012 T-SQL New Feature –THROW

 

이번 내용은 오류 처리에 대한 간단한 내용입니다. .NET 프로그래밍에서 에러 핸들링은 try catch 구문을 통해 작업을 하게 되며 class 등에서는 catch 문장에서 오류를 UI 단으로 아래와 같이 throw 시켜주게 됩니다.

try

            {

 

            }

            catch (System.DivideByZeroException ex)

            {

                throw new System.Exception(ex.Message);

            }

        }

 

SQL Server 2005 버전부터 TRY, CATCH 문장을 지원해주고 있었는데 에러를 발생시키는 내용은 오류 메시지를 사전에 등록해두거나 아니면 사용자 지정 메시지를 RAISERROR 구문을 사용했었습니다.

SQL Server 2012 버전부터는 THROW 구문을 사용해야 하며 앞에서 살펴본 몇몇 기능들과 마찬가지로  .NET 프로그래밍과 거의 유사합니다.

THROW [ { error_number | @local_variable },

        { message | @local_variable },

    { state | @local_variable }

] [ ; ]

 

 

간단한 예제를 한번 살펴보도록 하겠습니다.

Deparment 테이블의 경우 Name에 고유인덱스가 걸려있어 아래와 같이 기존 부서 이름을 입력시는 오류가 발생하게 됩니다. CATCH 문장에서 THROW를 통해 응용 프로그램이나 호출하는 프로시저로 오류를 전달할 수 있습니다.

BEGIN TRY

             INSERT [HumanResources].[Department] (Name, GroupName)

             VALUES ('Engineering','Manufacturing')

END TRY

BEGIN CATCH

              THROW;

 

END CATCH

 

--(0 행이 영향을 받음)

--메시지 2601, 수준 14, 상태 1, 3

--고유 인덱스 'AK_Department_Name'() 포함하는 개체 'HumanResources.Department' 중복 행을 삽입할 없습니다. 중복 값은 (Engineering)입니다.

 

 

물론 .NET 프로그래밍처럼 사용자 지정 오류메시지를 아래와 같이 THROW 시킬 수 있습니다.

BEGIN TRY

             INSERT [HumanResources].[Department] (Name, GroupName)

             VALUES ('Engineering','Manufacturing')

END TRY

BEGIN CATCH

              THROW 50001,'부서 이름 중복',1;

 

END CATCH

 

--(0 행이 영향을 받음)

--메시지 50001, 수준 16, 상태 1, 7

--부서 이름 중복

 

THROW 구문 전에 오류로그 저장등을 위해 ERROR_NUMBER() 등을 사용할 수 있습니다.

 

BEGIN TRY

             INSERT [HumanResources].[Department] (Name, GroupName)

             VALUES ('Engineering','Manufacturing')

END TRY

BEGIN CATCH

              SELECT  ERROR_NUMBER(),  ERROR_PROCEDURE(), ERROR_MESSAGE();

              THROW 50001,'부서 이름 중복',1;

              

END CATCH

 

THROW에 대한 자세한 내용은 아래 링크를 참조할 수 있습니다.

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

 

신고
posted by 정홍주
2012.04.25 09:58 SQL

SQL Server 2012 Update TTT에 왔습니다. 

주로 다루는 내용은 Administrator, Developer 와 BI에 대한 3일 교육인데
여기 날씨가 비가오고 그러네요.

관련 링크와 예제 등이 RTM으로 업데이트 되었으므로 추후 링크하도록 하겠습니다.

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

SQL Server 2012 T-SQL : 변환함수

 

이번에도 .NET 프로그래밍에서와 유사한 변환 함수를 한번 알아보도록 하겠습니다.

먼저 참조 링크는 아래와 같습니다.

http://msdn.microsoft.com/ko-kr/library/hh230993(v=sql.110).aspx

 

.NET 프로그래밍에서의 변환 CONVERT 함수는 아래와 같습니다. Parse, TryParse, Convert 등의 클래스나 메서드가 있습니다. 예를 들면 아래와 같습니다.

string s = "9000";

int price = Int32.Parse(s);

int price2 = 0;

if (Int32.TryParse(s, price2))

{

price = price2;

}

물론 다른 DateTime 데이터 형식도 가능하며 CultureInfo를 통한 내용도 지원합니다.

 

자 그럼 SQL Server 2012에서는 변환 함수가 어떤 내용이 지원될까요? 아래와 같은 함수를 제공하니 변환시 적용하면 아주 좋을 듯 합니다.

l  PARSE

PARSE 함수부터 알아보도록 하겠습니다.

PARSE ( string_value AS data_type [ USING culture ] )

요청한 데이터 형식으로 변환된 식 결과를 반환합니다 아래 내용을 보시면 바로 이해가 되실 듯 합니다. 입력값을 적절한 데이터 형식으로 변환하면서 Culture를 적용할 수 있습니다.

 

SELECT PARSE(N'2012 4 11 09:00, 수요일' AS datetime USING 'ko-KR');

--2012-04-11 09:00:00.000

SELECT PARSE(N'2012 4 11 오전 9' AS datetime USING 'ko-KR');

--2012-04-11 09:00:00.000

SELECT PARSE(N'2012 4 11, 오전 9' AS datetime USING 'ko-KR');

--2012-04-11 09:00:00.000

 

SELECT PARSE('\100000' AS money USING 'ko-KR') AS Result

--100000.00

SELECT PARSE('$100000' AS money USING 'en-US') AS Result

--100000.00

 

l  TRY_PARSE

.NET 프로그래밍도 마찬가지인데 잘못된 데이터에 대한 변환시 오류가 발생합니다. 아래처럼요.

SELECT PARSE('ddd' AS money USING 'en-US') AS Result

메시지 9819, 수준 16, 상태 1, 1

culture 'en-US'() 사용하여 문자열 'ddd'() money 데이터 형식으로 변환하는 오류가 발생했습니다.

 

 

데이터가 잘 들어오면 되지만 아니면 오류가 발생하므로 변환이 되는지 검사를 해볼 수 있는 함수가 TRY_PARSE 입니다. 변환이 가능하면 변환값이 나오고 아니면 NULL을 반환합니다.

.NET 프로그래밍과 사실 거의 유사합니다.  아래 구문을 보시죠.

 

SELECT TRY_PARSE('ddd' AS money USING 'en-US') AS Result

--NULL

 

 

 

l  TRY_CONVERT

TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )

TRY_PARSE와 유사합니다, 변환이 성공하면 값을 반환하며 실패하면 NULL을 반환합니다. Culture는 없으며 Style을 제공하는 것이 차이점입니다.

SELECT TRY_CONVERT(datetime2, '04/11/2012') AS Result;

--2012-04-11 00:00:00.0000000

SELECT TRY_CONVERT(datetime2, '13/11/2012') AS Result;

--NULL

 

DECLARE @dt DATETIME = PARSE(N'2012 4 11 오전 9' AS datetime USING 'ko-KR')

SELECT TRY_CONVERT(varchar(30), @dt,112) AS Result;

--20120411

 

이상으로 새롭게 제공되는 변환함수에 대한 내용을 정리했습니다.

 

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

 

SQL Server 2012에서의 FORMAT 함수

 

.NET에서는 날짜 형식이나 숫자 형식에 대한 FORMAT을 초기부터 제공해왔습니다. 그래서 아래와 같은 코드를 작성할 수 있습니다. CultureInfo를 통해 언어별 지원을 제공할 수 도 있습니다.

 

CultureInfo culture = new CultureInfo("fr-FR");

string dt = string.Format(culture, "{0:D}", DateTime.Now);

 

int i = 62500;

string price = i.ToString("C", culture);

string price2 = string.Format(culture, "{0:C}", i);

 

dt : "mardi 3 avril 2012"

price : "62 500,00 €"

price2 : "62 500,00 €"

 

 

SQL Server 에서는 날짜 형식이나 숫자 형식에 대한 지원을 .NET 응용 프로그램에서 처리하거나 별도의 테이블을 생성하여 처리했습니다. 또는 언어별 컬럼을 생성하여 처리해야 했습니다.

 

SQL Server 2012에서는 FORMAT 함수가 지원이 되어 .NET 과 거의 동일하게 작업이 가능합니다.

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

 

l  날짜 형식에 대한 부분을 알아보도록 하겠습니다.

DECLARE @d DATE = GETDATE()

 

SELECT        FORMAT(@d, N'dd/MM/yyyy')

--03-04-2012

 

SELECT     FORMAT(@d, N'dddd, MMMM dd, yyyy', 'fr-fr')

--mardi, avril 03, 2012

 

SELECT     FORMAT(@d, N'dddd, MMMM dd, yyyy', 'en-US')

--Tuesday, April 03, 2012

 

 

l  숫자 형식에 대한 부분을 알아보도록 하겠습니다.

 

DECLARE @i INT=62500

SELECT price = FORMAT(@i, 'C')

--₩62,500

 

SELECT price = FORMAT(@i, 'C','en-US')

--$62,500.00

 

SELECT price = FORMAT(@i, 'N')

--62,500.00

 

SELECT price = FORMAT(0.625, 'P')

--62.50 %

 

 

위 내용을 보면 .NET 코딩과 유사하다는 것을 알 수 있습니다. 응용 프로그램에서 추가적인 처리를 하지 않고도 날짜, 숫자 형식의 문자열 포맷팅을 T-SQL에서도 FORMAT 함수를 통해 지원할 수 있습니다.

 

 

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

SQL Server 2012 T-SQL: CHOOSE, IIF 논리함수

 

새롭게 제공되는 내용 중에서 CHOOSE, IIF를 한번 사용해보도록 하겠습니다.

SELECT 구문에서 조건에 따라 값을 나타내려고 할 경우 CASE WHEN 문을 사용해서 처리했습니다. CASE 구문을 작성하면 코드가 길어지고 가독성이 좀 떨어지는 측면이 있었습니다.

 
l  CHOOSE

SQL Server 2012에서는 보다 더 간결하고 쉽게 처리 가능한 CHOOSE, IIF 구문이 제공됩니다.

아래 구문을 한번 살펴보시죠~

 

SELECT  CASE DATEPART(WEEKDAY, GETDATE())

                                WHEN 1 THEN N'일요일'

                                WHEN 2 THEN N'월요일'

                                WHEN 3 THEN N'화요일'

                                WHEN 4 THEN N'수요일'

                                WHEN 5 THEN N'목요일'

                                WHEN 6 THEN N'금요일'

                                WHEN 7 THEN N'토요일'

                     END

 

위 구문의 경우는 CASE WHEN 구문으로 작성한 내용인데 CHOOSE 구문으로 변경해보도록 하겠습니다. 더 간결해보입니다.

SELECT CHOOSE(DATEPART(WEEKDAY, GETDATE())                     , N'일요일',N'월요일',N'화요일',N'수요일',N'목요일',N'금요일',N'토요일')

 

CHOOSE 논리함수의 구문의 규칙은 아래와 같습니다.

CHOOSE ( index, val_1, val_2 [, val_n ] )

 

Index 1부터 시작하는 정수이며 val_1.., 등은 인덱스에 매치되는 임의의 데이터 형식입니다.

그러므로 1부터 반환하는 정수가 나오는 인수를 맨 처음에, 나머지는 해당 값을 정의하면 됩니다.

SELECT CHOOSE ( 3, 'Manager', 'Director', 'Developer', 'Tester' ) AS Result;

--Developer

3이므로 세 번째에 해당하는 Developer를 반환합니다.

 

CHOOSE 논리 함수에 대한 내용은 아래 링크를 참조하십시오.

http://technet.microsoft.com/ko-kr/library/hh213019(v=sql.110).aspx 

 

l IIF

또 다른 논리함수인 IIF 를 한번 살펴보겠습니다. 사실 IIF CASE 문의 약식 방법입니다. TRUE, FALSE에 따라 처리할 경우 IIF를 사용할 수 있습니다. IIF SQL Server Reporting의 식에서도 사용이 되었기 때문에 사용해보았다면 적용하시는데 큰 문제 없을 것으로 보입니다.

IIF ( boolean_expression, true_value, false_value ) 

boolean_expression TRUE 이면 true_value 가 반환됩니다. 

 

SELECT

[ProductID], [Name], [ListPrice]

, CASE WHEN [ListPrice] < 500 THEN  N'500이하'

           ELSE 

             CASE WHEN [ListPrice] < 1000 THEN N'1000이하' ELSE N'1000이상'
            
 END

           END AS ProceLevel

FROM [Production].[Product]

WHERE [ListPrice] >0

 

500보다 작으면 ‘500이하’, 500보다 크고 1000보다 작으면 ‘1000’이하, 1000보다 크면 ‘1000’이상입니다. IIF로 변환해보겠습니다 

SELECT

[ProductID], [Name], [ListPrice]

, IIF([ListPrice] < 500, N'500이하', IIF([ListPrice] < 1000, N'1000이하',N'1000이상')) AS ProceLevel

FROM [Production].[Product]

WHERE [ListPrice] >0  

/*

522      HL Touring Seat Assembly      196.92  500이하

680      HL Road Frame - Black, 58      1431.50 1000이상

706      HL Road Frame - Red, 58        1431.50 1000이상

707      Sport-100 Helmet, Red 34.99    500이하

708      Sport-100 Helmet, Black          34.99    500이하

*/

 

위 두 구문의 실행계획을 보면 똑같습니다. 편하고 가독성 있는 구문을 쓰면 될 것 같네요~


CASE 문 보다 더 간결한 CHOOSE, IIF 논리함수에 대한 내용을 살펴보았습니다.


신고
posted by 정홍주
2012.03.23 08:30 Microsft Azure/SQL Databases


SQL Azure – AdventureWorks2012

 

SQL Azure의 버전이 업데이트된 것은 예전에 포스팅을 했었는데 Sample Database가 지난 2월에 이미 올라왔었습니다. Codeplex 사이트에서 확인이 가능합니다.

아래 링크를 참고하세요.

http://msftdbprodsamples.codeplex.com/releases/view/37304

 

저는 이미 데이터베이스를 배포했고 아래 그림은 로컬 PC SQL Server 2012에서 연결한 내용입니다.

 

SQL Server 2012의 모든 T-SQL 구문을 지원하는 것은 아닙니다만 SQL Azure에서도 SQL Server 2012의 기능을 많이 지원한다는 것을 알아보겠습니다.

이전 블로깅에서 에 대한 내용을 다루었는데 실행해서 결과를 알아보겠습니다.

아래 쿼리를 실행해보겠습니다.

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

 

ORDER BY ProductID DESC  

결과는 아래와 같습니다.

/*

504        Road-750 Black, 52           BK-R19B-52         Black     52

503        Road-750 Black, 48           BK-R19B-48         Black     48

502        Road-750 Black, 44           BK-R19B-44         Black     44

501        HL Bottom Bracket            BB-9108 NULL     NULL

500        ML Bottom Bracket           BB-8107 NULL     NULL

499        LL Bottom Bracket            BB-7421 NULL     NULL

498        Mountain-500 Black, 52     BK-M18B-52        Black     52

*/

 

아래 페이징 쿼리를 실행해보겠습니다.

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

 

ORDER BY ProductID DESC  

 

OFFSET 20 ROWS

 

    FETCH NEXT 10 ROWS ONLY;

 

결과는 아래와 같습니다.

 

간단히 SQL Azure의 샘플 데이터베이스 업데이트와 SQL Server 2012의 기능을 지원한다는 것을 알아보았습니다.


신고
posted by 정홍주
prev 1 2 next

티스토리 툴바