'Text'에 해당되는 글 3건

Programming/HTML CSS

1. CSS text 사용
._text {
 text-align:center;
 text-decoration:overline;
}
▶CSS 정의
<p class="_text">abcdefg</p>
▶CSS 적용

2. CSS text 속성

(1) text-align

글자의 정렬형태를 지정합니다. left(왼쪽), center(가운데), right(오른쪽), justify(양쪽정렬) 값을 사용합니다. 이 속성은 span과 같은 좌우 공간이 존재하지 않는 태그의 경우에는 적용되지 않으므로 주의해야 합니다.

(2) text-decoration

글자를 장식하며 none(없음), underline(밑줄), overline(윗줄), line-through(가로선), blink(깜빡임)값을 사용합니다. blink는 넷스케이프에서만 지원합니다.

(3) text-indent

들여쓰기를 나타내며 숫자를 사용해 px단위나 %단위로 값을 지정합니다.

(4) text-transform

영문사용시 대소문자 표시 형태를 나타냅니다. none는 효과없음에 해당되며 capitalize는 첫문자만을 대문자로, uppercase는 모든 문자를 대문자로 표시합니다. 반면 lowercase는 모든 문자를 소문자로 변환합니다.

(5) text-shadow

글자에 그림자 효과를 주는 속성이며 아래와 같이 속성을 지정합니다.
text-shadow: 5px 3px 10px black;
첫번째 값은 오른쪽에 퍼질 그림자의 크기를 두번째는 아래쪽에 퍼질 그림자의 크기를 의미합니다. 세번째는 그림자의 선명도를 나타내며 마지막 네번째는 그림자의 색상입니다.

만일 여러 색상의 그림자를 동시에 구현하고자 한다면 위의 속성지정을 ,(콤마)를 사용해 원하는 만큼 여러번 작성하면 됩니다.
text-shadow: 5px 5px 10px black, 5px 5px 10px red;
0 0
Programming/Microsoft SQL Server
For Xml은 기존 Table형태의 결과를 XML형태로 바꿔서 조회하는 기능을 제공합니다. 반면 OpenXml은 For Xml과 반대로 XML형태의 Data를 Table형태로 바꿔서 조회하는 기능을 가지고 있습니다.

우선 AdventureWorks2008예제 Database의 HumanResources.Department Table을 XML형태로 조회하여 간단한 XML Data를 생성하도록 하겠습니다.

Select Top(3) 1 As Tag,
 Null As Parent,
 DepartmentID As [Department!1!ID],
 Null As [Names!2!Nm],
 Null As [Group!3!Name!Element]
From HumanResources.Department
Union
Select Top(3) 2 As Tag,
 1 As Parent,
 DepartmentID,
 Name,
 Null
From HumanResources.Department
Union
Select Top(3) 3 As Tag,
 2 As Parent,
 DepartmentID,
 Name,
 GroupName
From HumanResources.Department
Order By [Department!1!ID], [Names!2!Nm], [Group!3!Name!Element]
For XML Explicit;


위에서 만들어진 XML Data를 XML 변수에 저장합니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

XML형 Data변수에 XML내용을 저장합니다.(최상위 요소인 <TopEle>는 원래 XML에서 최상위 요소가 존재해야 한다는 제약으로 인해 새로 추가시킨 최상위 요소입니다.)

이제 다음 순서로 XML 문서의 구문분석 기능을 갖고 있는  sp_xml_preparedocment System Procedure를 사용하여 해당 XML을 분석하도록 해야 합니다. sp_xml_preparedocument Procedure는 인수로 전달된 XML Data에 대한 handle값을 정수형태로 반환하므로 이후 부터 XML문서를 조작할때는 이 Handle값을 이용하게 됩니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

Declare @iHandle Int;
Exec sp_xml_preparedocument @iHandle Output, @MyXml;


sp_xml_preparedocument Procedure를 통해 @iHandle에 해당 handle값을 저장합니다.

여기까지 OpenXml을 사용할 준비가 완료된 것입니다. OpenXml사용시에는 다음과 같이 위에서 얻어진 Handle값을 인수로 주고 출력할 기준이 되는 요소를 지정해서 사용면 됩니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

Declare @iHandle Int;
Exec sp_xml_preparedocument @iHandle Output, @MyXml;

Select *
From OpenXml(@iHandle, '/TopEle/Department')
Order By id;


OpenXml을 통하여 sp_xml_preparedocument에서 구분분석된 XML Data를 TopEle의 Department요소를 중심으로 출력하도록 합니다.


위 Query결과를 보면 XML Data에 대한 내용이 아니라 sp_xml_preparedocument를 통해 구문분석된 결과를 보여고 있다는 것을 알 수 있습니다.

이 결과 Table에서 가장 첫번째 id는 XML을 분석한 요소, 속성, 값등 XML을 이루고 있는 구조 하나하나를 모두 나열하고 거기에 번호를 붙여 id로 표시한 겁니다.

두번째 parentid는 해당 id의 요소가 어떤 요소에 속해 있는지를 나타내는 것입니다. 우선 첫번째 행과 두번째 행만을 살펴보자면 id가 2번인 요소는 Department요소로서 부모 요소는 TopEle가 되며 이 최상위 요소는 id가 0이므로 parentid가 0으로 표시되고 있습니다. 또한 id가 3인 요소는 ID요소로 이 ID요소는 id가 2번인 Department에 속해 있는 속성이기 때문에 parentid값으로 2가 나타나고 있습니다.

세번째 nodetype는 해당 요소가 어떤 type인지를 나타내고 있는 것으로 이 값이 1이면 XML의 요소, 2이면 속성, 3이면 속성의 값을 의미합니다.

네번째 localname은 요소의 이름이고 여덟번째 prev는 요소가 단순한 하위요소가 아니라 새로 시작되는 Group요소일 경우 이전에 먼저 시작된 상위 Group의 id를 의미합니다.

아홉번째 text는 nodetype이 3(속성)일 경우 해당 속성의 값을 표시하는 부분입니다.

위 결과를 가지고 이제 OpenXml에 With option을 추가하여 원래 의도한 결과를 다시 조회해 보겠습니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

Declare @iHandle Int;
Exec sp_xml_preparedocument @iHandle Output, @MyXml;

Select *
From OpenXml(@iHandle, '/TopEle/Department', 1)
With (ID Int);

Select *
From OpenXml(@iHandle, '/TopEle/Department/Names', 1)
With (Nm Char(15));


두번째와 세번째 Select문을 주목해 주십시오. 첫번째 OpenXml에는 /TopEle/Department 가 지정되어 Department요소를 중심으로 하겠다고 하는 것이며 뒤에 1은 속성을 조회한다는 의미합니다. With을 통해 ID Int라고 지정했으므로 결국 Department요소에서 ID속성의 값을 Int형으로 가져오라는 뜻이 됩니다.

두번째 Select문도 마찬가지 인데 /TopEle/Department/Names 로 지정되어 해당 요소의 Nm속성을 Char형으로 가져오게 합니다.


물로 위 두개의 Select문을 합쳐 다음과 같이 하나로 표시할 수도 있습니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

Declare @iHandle Int;
Exec sp_xml_preparedocument @iHandle Output, @MyXml;

Select *
From OpenXml(@iHandle, '/TopEle/Department/Names', 1)
With (ID Int
'../@ID', Nm Char(15));


With option을 보시면 ID int뒤에 '../@ID'라는 내용이 추가된걸 알 수 있습니다. 이것이 의미하는 것은 '상위요소(../)에서 ID속성(@ID)의 값을 가져온다.'는 뜻을 담고있습니다.

이렇게 하는 이유는 OpenXml에 요소지정시 /TopEle/Department/Names 라고 하였으므로 결국Names 요소 이하의 내용만 가져오게 되는데 이렇게 되면 Department요소의 ID속성값은 가져오지 못하는 문제가 생기게 되므로 '../@ID'를 통해 상위 요소의 속성값을 가져올 수 있도록 지정해야 하는 것입니다.

그리고 OpenXml로 조회시 가져올 항목이 늘어나면 With에 Column지정할때 콤마(,)를 사용하여 각 Column을 구분해 주시면 됩니다.


이번에는 Department ID속성의 내용과 더불어 Name요소의 Data값을 가져와 보도록 하겠습니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

Declare @iHandle Int;
Exec sp_xml_preparedocument @iHandle Output, @MyXml;

Select *
From OpenXml(@iHandle, '/TopEle/Department/Names/Group', 2)
With (ID Int
'../../@ID', Name Char(50));


Name의 Data값을 가져오기 위해 요소를 /TopEle/Department/Names/Group까지 지정하였습니다. 또한 속성의 값이 아닌 요소의 값을 가져오게 되므로 1에서 2로 바꿔 요소의 값을 가져오도록 하였습니다.

이때 ID는 기존에 /TopEle/Department/Names에서 /TopEle/Department/Names/Group이라고 한단계 더 내려간 요소를 지정하였으므로 ID int뒤에도 ../ 의 경로지정을 하나 더 붙여 상위 2개 요소위(../../)에서 ID속성의 값을 가져와야 한다고 지정하였습니다.

여기까지 보면 'OpenXml에서 2로 하여 요소의 값을 가져오도록 지정했는데 ID는 속성값이므로 문제가 되지 않을까?' 라고 의문을 가질 수 있지만 크게 문제되지는 않습니다. ID앞에 @문자를 붙여 '가져올 내용은 속성의 값이다.'라고 명시하였기 때문입니다.


참고 :
요소의 값과 속성을 모두 포함시키려면 다음처럼 3(요소1 + 속성2)을 지정해야 합니다.

From OpenXml(@iHandle, '/TopEle/Department/Names/Group', 3)

위에서 언급된 내용을 토대로 해당 XML의 모든 내용을 가져와 보도록 하보겠습니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

Declare @iHandle Int;
Exec sp_xml_preparedocument @iHandle Output, @MyXml;

Select *
From OpenXml(@iHandle, '/TopEle/Department/Names/Group', 2)
With (ID Int
'../../@ID', Nm Char(15) '../@Nm', Name Char(50));

Select Top(3) DepartmentID, Name, GroupName
From HumanResources.Department;



위 결과를 실제 Table의 내용과 비교해 보시기 바랍니다.

OpenXml을 사용할때 Select문을 보시면 일반 Table 조회와 별 차이가 없습니다. 따라서 일반 Table처럼 where문으로 특정한 조건의 내용만 가져올 수 있고 Max나 Sum처럼 수식을 정할 수도 있습니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

Declare @iHandle Int;
Exec sp_xml_preparedocument @iHandle Output, @MyXml;

Select max(ID)
From OpenXml(@iHandle, '/TopEle/Department/Names/Group', 2)
With (ID Int
'../../@ID', Nm Char(15) '../@Nm', Name Char(50));

Select *
From OpenXml(@iHandle, '/TopEle/Department/Names/Group', 2)
With (ID Int
'../../@ID', Nm Char(15) '../@Nm', Name Char(50))
Where ID = 3;


첫번째 Selet에서는 ID가 가장 큰 값을 가져오도록 했으며 두번째 Select에서는 ID가 3인 내용만 조회되도록 하였습니다.


OpenXml을 사용하기 위해서는 XML을 분석할 sp_xml_preparedocument Procedure를 호출한다고 하였습니다.

이 호출된 sp_xml_preparedocument Procedure는 해당 XML Data를 Memory에 올려놓고 구문분석과 handle을 반환하는 역활을 수행합니다. 이때 Memory에 Load된 XML을 제거해 주지 않으면 계속해서 Memory를 잡아먹는 낭비를 가져올 수 있습니다.

따라서 해당 XML에 대해 적절한 처리를 수행하고 나면 다음 처럼 sp_removedocument Procedure를 사용하여 Memory에서 XML Data를 제거해야할 필요가 있습니다.

Declare @MyXml Xml;
Set @MyXml = '
<TopEle>
<Department ID="1">
  <Names Nm="Engineering">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="2">
  <Names Nm="Tool Design">
    <Group>
      <Name>Research and Development</Name>
    </Group>
  </Names>
</Department>
<Department ID="3">
  <Names Nm="Sales">
    <Group>
      <Name>Sales and Marketing</Name>
    </Group>
  </Names>
</Department>
</TopEle>';

Declare @iHandle Int;
Exec sp_xml_preparedocument @iHandle Output, @MyXml;

Select *
From OpenXml(@iHandle, '/TopEle/Department/Names/Group', 2)
With (ID Int
'../../@ID', Nm Char(15) '../@Nm', Name Char(50));

Exec sp_xml_removedocument @iHandle;


sp_xml_removedocument Procedure에 XML의 handle을 넘겨 Memory에서 제거되도록 합니다.
0 0
Programming/Microsoft SQL Server
1. 숫자(정수)

 데이터형  크기  범위
 Begint  8byte  -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
 Int  4byte  -2,147,483,648 ~ -2,147,483,647
 Tinyint  2byte  0 ~ 255
 Bit  1byte  1, 0, Null
 Smallint  4byte  -32,768 ~ 32,767

2. 실수

(1) 고정형(Decimal, Numeric)
크기및 범위 : Numeric(전체크기, 소수점이하크기)

만일 Numeric(12, 2)라고 한다면 전체가 12자리이고 그 중에서 소수점이 2자리임을 의미합니다. 이때 전체크기가 1~9라면 5 byte, 10~19라면 9 byte, 20~28이라면 13 byte의 크기를 갖게 됩니다. 즉, 전체자리가 위와같이 증가한다면 크기는 4byte씩 늘어나는 것입니다.

또한 사용상 Decimal과 Numeric은 차이가 없습니다.

(2) 부동형실수(Float, Real)
크기및 범위 : Float(숫자)

Float에는 얼마만큼의 숫자가 들어가느냐에 따라 표현가능한 자리수가 달라집니다. 일반적으로 1~24까지 7자리(4 byte), 25~53까지 15자리(8 byte)표현이 가능합니다.

Real은 Float(24)와 같으며 7자리까지만 표현이 가능합니다.

Float과 Real은 상당히 큰 숫자를 다룰 수 있지만 근사치 데이터를 저장하는데, 실수를 다르는 경우 되도록 Decimal을 사용하는 것이 좋습니다.

3. 통화(통화형식은 소수점 이하 4자리수까지로 제한합니다.)

 데이터형  크기  범위
 Money  8byte  -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
 Smallmoney  4byte  -214,748.3648 ~ 214,748.3647

4. 문자(문자열)

 데이터형  크기  범위
 Char(n) / NChar(n)  입력된 n byte / 입력된 n * 2 byte  8000자 이하 / 4000자 이하
 Varchar(n) / NVarchar(n)  n에 입력된 크기와 상관없이 실제 사용된 만큼  8000자 이하 / 4000자 이하, MAX지정시 2기가 / 1,073,741,823자(단 MAX는 MS SQL 2008버전부터는 사용되지 않습니다.)
 Text / NText  231-1 byte / 230-1 byte  2,147,483,647자 / 1,073,741,823자

Text 나 NText 그리고 Image는 더이상 MS SQL Server에서 지원하지 않을 예정이니 사용하지 말고 대신 VarChar(Max), nVarChar(Max), Varbinary(Max)를 사용하는 것이 좋습니다.

Char는 고정형입니다. 예를 들어 Char(100)이라고 하면 100바이트 크기를 나타냅니다. 'abc'문자열을 저장하는 경우 3바이트만을 필요로 하지만 100중 3만 차지하고 나머지 97바이트는 버려집니다. 반면 VarChar는 가변형식으로서 VarChar(100)을 하더라도 'abc'를 저장할때는 3바이트만을 차지하기 때문에 공간효휼성은 더 좋습니다. 다만 성능은 Char형이 더 우위에 있습니다.

참고:
n으로 시작되는 형식은 유니코드문자용입니다.(대부분의 경우 크기는 n이 없는 형의 * 2 가 되며 저장할 수 있는 크기는 n이 없는 형의 절반입니다.)

5. 날짜형식

 데이터형  크기  범위
 Datetime  8byte  1753-01-01 ~ 9999-12-31(ms단위까지)
 SmallDateTime  4byte  1990-01-01 ~ 2079-06-09(분까지)

참고 :
년도를 4자리로 하지 않고 두자리만 지정시 년도는 다음과 같이 인식됩니다.
00 ~ 49 까지 : 2000년대
50 ~ 99 까지 : 1900년대

6. 이진형식

 데이터형  범위
 Binary(n) / VarBinary(n)  1~8000까지의 이진데이터(n을 생략시 1, cast에서 지정하지 않으면 30을 기본)
 Image  232-1byte(2,147,483,647 byte까지)

7. 시스템 형식

 데이터형  설명
 Cursor  커서
 Sql_Variant  IMAGE, NTEXT, NVARCHAR(MAX), TEXT, TIMESTAMP, VARCHAR(MAX), XML를 제외한 모든 자료형 대체가능
 Table  Table
 TimeStamp  TABLE의 행이 바뀔때마다 바뀌는 고유한 숫자(8 byte)
 Uniqueidentifier  Newid()를 통해 발생되는 고유값으로 16진수로 구성된 각 자리수가 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx형태로 구성되며 IS NULL이나 IS NOT NULL, =, <=, >=, <>, >, < 의 연산자만 허용합니다.
 Xml  Xml

8. 사용자 형식

(1) sp_addtype

sp_addtype 이름, '데이터형', null 여부, '소유자' 의 형태로 씁니다. null여부와 소유자는 생략할 수 있는데 이경우 null허용하게 되며 해당 데이터형은 현재사용자가 소유자가 되는것이 기본입니다.

sp_addtype postal, 'Char(07)';
Go

Declare @ipostal As postal;
Set @ipostal = '780-080';
Select @ipostal;


지정한 사용자 형식을 삭제하는 방법은 다음과 같습니다.

sp_droptype postal;

(2) Create Type

Create Type은 sp_addtype에 비해 소유자를 지정할 수 없을뿐 sp_addtype과 같습니다.
사용형식은 'Create Type 이름 From 데이터형, null 여부'로 구현됩니다.

Create Type postal From Char(07) Not Null;
Go

Declare @ipostal As postal;
Set @ipostal = '780-080'
Select @ipostal;


지정한 사용자 형식을 삭제하는 방법은 다음과 같습니다.

Drop Type postal;


9. ISO 표준 형식


MS SQL Server는 ISO와의 호환을 위해 다음 단어를 해당 형식으로 일치시켰습니다. 따라서 Char대신 Character를 사용할 수 있습니다.


 본래형식

 ISO형식

 Char

 Character

 VarChar

 Character Varying

 Varbinary

 Binary Varying

 Decimal

 Dec

 Float

 Double Precision

 Int

 Integer

 nChar

 National Character

 nVarChar

 National Character Varying

 RowVersion

 Timestamp


2 0
1
블로그 이미지

클리엘