SQL Server Data Types

In SQL Server, a data type defines the type of data in a table column or variable. It is a mandatory and essential step in designing a table. A table with inappropriate data types can lead to various issues such as improper query optimization, performance issues, data truncation

String data types

Data type

Description

Max size

Storage

char(n)

Fixed width character string

8,000 characters

Defined width

varchar(n)

Variable width character string

8,000 characters

2 bytes + number of chars

varchar(max)

Variable width character string

1,073,741,824 characters

2 bytes + number of chars

text

Variable width character string

2GB of text data

4 bytes + number of chars

nchar

Fixed width Unicode string

4,000 characters

Defined width x 2

nvarchar

Variable width Unicode string

4,000 characters

 

nvarchar(max)

Variable width Unicode string

536,870,912 characters

 

ntext

Variable width Unicode string

2GB of text data

 

binary(n)

Fixed width binary string

8,000 bytes

 

varbinary

Variable width binary string

8,000 bytes

 

varbinary(max)

Variable width binary string

2GB

 

image

Variable width binary string

2GB

 

 

Numeric data types

Data type

Description

Storage

bit

Integer that can be 0, 1, or NULL

 

tinyint

Allows whole numbers from 0 to 255

1 byte

smallint

Allows whole numbers between -32,768 and 32,767

2 bytes

int

Allows whole numbers between -2,147,483,648 and 2,147,483,647

4 bytes

bigint

Allows whole numbers between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807

8 bytes

decimal(p,s)

Fixed precision and scale numbers.

Allows numbers from -10^38 +1 to 10^38 –1.

The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18.

The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0

5-17 bytes

numeric(p,s)

Fixed precision and scale numbers.

Allows numbers from -10^38 +1 to 10^38 –1.

The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18.

The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0

5-17 bytes

smallmoney

Monetary data from -214,748.3648 to 214,748.3647

4 bytes

money

Monetary data from -922,337,203,685,477.5808 to 922,337,203,685,477.5807

8 bytes

float(n)

Floating precision number data from -1.79E + 308 to 1.79E + 308.

The n parameter indicates whether the field should hold 4 or 8 bytes. float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default value of n is 53.

4 or 8 bytes

real

Floating precision number data from -3.40E + 38 to 3.40E + 38

4 bytes

 

Date and Time data types

Data type

Description

Storage

datetime

From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 milliseconds

8 bytes

datetime2

From January 1, 0001 to December 31, 9999 with an accuracy of 100 nanoseconds

6-8 bytes

smalldatetime

From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute

4 bytes

date

Store a date only. From January 1, 0001 to December 31, 9999

3 bytes

time

Store a time only to an accuracy of 100 nanoseconds

3-5 bytes

datetimeoffset

The same as datetime2 with the addition of a time zone offset

8-10 bytes

timestamp

Stores a unique number that gets updated every time a row gets created or modified. The timestamp value is based upon an internal clock and does not correspond to real time. Each table may have only one timestamp variable

 

 

Other data types

Data type

Description

sql_variant

Stores up to 8,000 bytes of data of various data types, except text, ntext, and timestamp

uniqueidentifier

Stores a globally unique identifier (GUID)

xml

Stores XML formatted data. Maximum 2GB

cursor

Stores a reference to a cursor used for database operations

table

Stores a result-set for later processing