Você está na página 1de 15

Categorias de tipo de dados

Os tipos de dados em SQL Server são organizados nas seguintes categorias:

 Numéricos exatos
 Numéricos aproximados
 1Cadeias de caracteres
 Cadeias de caracteres Unicode
 Cadeias de caracteres binária
 Outros tipos de dados

Em SQL Server, com base em suas características de armazenamento, alguns tipos de dados são designados
como pertencendo aos seguintes grupos:

 Tipos de dados de valor grande: varchar(max) e nvarchar(max)

 Tipos de dados de objeto grande: text, ntext, image, varbinary(max) e xml

Observação
sp_help retorna -1 como o comprimento dos tipos de dados de valor grande e xml.

TIPOS NUMÉRICOS E EXATOS

int, bigint, smallint e tinyint (Transact-SQL)


Tipos de dados numéricos exatos que usam dados inteiros. Para economizar espaço no banco de dados, use
o menor tipo de dados que pode conter todos os valores possíveis de maneira confiável. Por exemplo, tinyint é
suficiente para a idade de uma pessoa porque não existe ninguém que viva por mais de 255 anos. Mas tinyint não é
suficiente para a idade de um edifício, porque um edifício pode ter mais de 255 anos.

Tipo de dados Intervalo Armazenamento


-2^63 (-9.223.372.036.854.775.808) a 2^63-1
bigint 8 bytes
(9.223.372.036.854.775.807)
int -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647) 4 bytes
smallint -2^15 (-32.768) a 2^15-1 (32.767) 2 bytes
tinyint 0 a 255 1 byte

Remarks

O tipo de dados int é o tipo de dados inteiros primário do SQL Server. O tipo de dados bigintdeve ser usado
quando valores inteiros podem exceder o intervalo ao qual tipo de dados int dá suporte.

bigint se ajusta entre smallmoney e int no gráfico de precedência de tipo de dados.

As funções retornam bigint somente se a expressão de parâmetro é um tipo de dados bigint.SQL Server não
promove automaticamente outros tipos de dados inteiros (tinyint, smallint e int) para bigint.

Cuidado
Ao usar os operadores aritméticos +, -, *, / ou % para executar a conversão implícita ou explícita de valores
constantes int, smallint, tinyint ou bigint nos tipos de dados float, real, decimal ou numeric, as regras que o SQL
Server aplica ao calcular o tipo de dados e a precisão dos resultados da expressão diferem, dependendo do fato
de a consulta ser ou não automaticamente parametrizada.
Portanto, as expressões semelhantes em consultas podem, às vezes, produzir resultados diferentes. Quando uma
consulta não é automaticamente parametrizada, o valor de constante é primeiramente convertido em numeric,
cuja precisão é apenas grande o suficiente para conter o valor da constante, antes de fazer a conversão no tipo de

1
dados especificado. Por exemplo, o valor de constante 1 é convertido em numeric (1, 0) e o valor de constante
250 é convertido em numeric (3, 0).
Quando uma consulta é automaticamente parametrizada, o valor de constante sempre é convertido em numeric
(10, 0) antes da conversão no tipo de dados final. Quando o operador / estiver envolvido, não apenas a precisão
do tipo do resultado pode diferir entre consultas semelhantes, mas também o valor do resultado. Por exemplo, o
valor do resultado de uma consulta automaticamente parametrizada que inclui a expressão SELECT CAST (1.0 / 7
AS float) diferirá do valor do resultado da mesma consulta que não é automaticamente parametrizada, porque os
resultados da primeira serão truncados para se ajustarem ao tipo de dados numeric (10, 0).

Convertendo dados inteiros

Quando integers são convertidos implicitamente em um tipo de dados character, se o integer for muito
grande para ser ajustado no campo de caractere, o SQL Server digitará o caractere ASCII 42, o asterisco (*).

As constantes de inteiro maiores que 2.147.483.647 são convertidas no tipo de dados decimal, não no tipo
de dados bigint. O exemplo a seguir mostra que quando o valor limite é excedido, o tipo de dados do resultado é
alterado de um int para um decimal.

SQL
SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;

Aqui está o conjunto de resultados.

SQL
Result1 Result2
1073741823 1073741824.500000

Exemplos

O exemplo a seguir cria uma tabela usando os tipos de dados bigint, int, smallint e tinyint. Os valores são
inseridos em cada coluna e retornados na instrução SELECT.

SQL
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);

GO

INSERT INTO dbo.MyTable VALUES (9223372036854775807, 2147483647,32767,255);


GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;

Aqui está o conjunto de resultados.

SQL
MyBigIntColumn MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807 2147483647 32767 255

(1 row(s) affected)

2
decimal e numeric (Transact-SQL)
Tipos de dados numéricos que têm precisão e escala fixos. Decimal e numeric são sinônimos e podem ser
usados intercambiavelmente.

Argumentos

decimal[ (p[ ,s] )] e numeric[ (p[ ,s] )]


Números de precisão e escala fixos. Quando a precisão máxima for usada, os valores válidos serão de - 10^38 +1 a
10^38 - 1. Os sinônimos ISO para decimal são dez e dec(p, s). numeric é funcionalmente equivalente a decimal.

p (precisão)
O número total máximo de dígitos decimais a ser armazenados. Esse número inclui o que está à direita e à esquerda
do ponto decimal. A precisão deve ser um valor de 1 até a precisão máxima de 38. A precisão padrão é 18.

Observação
Informatica é compatível apenas com 16 dígitos significativos, independentemente da precisão e da escala
especificadas.

s (escala)
O número máximo de dígitos decimais que são armazenados à direita do ponto decimal. Esse número é subtraído
de p para determinar o número máximo de dígitos à esquerda do separador decimal. A escala deve ser um valor de 0
a p, e só poderá ser especificada se a precisão for definida. A escala padrão é 0; portanto, 0 <= s <= p. Os tamanhos
máximos de armazenamento variam, com base na precisão.

Precisão Bytes de armazenamento


1-9 5
10–19 9
20–28 13
29-38 17

Observação
Informatica (conectado por meio do conector do SQL Server PDW Informatica) é compatível apenas com 16
dígitos significativos, independentemente da precisão e da escala especificadas.

Convertendo dados decimais e numéricos

Para os tipos de dados decimal e numeric, SQL Server considera cada combinação de precisão e escala como
um tipo de dados diferente. Por exemplo, decimal(5,5) e decimal(5,0) são considerados tipos de dados diferentes.

Nas instruções Transact-SQL, uma constante com um ponto decimal é convertida automaticamente em um
valor de dados numeric, usando a escala e a precisão mínimas necessárias. Por exemplo, a constante 12,345 é
convertida em um valor numeric com uma precisão 5 e uma escala 3.

Converter de decimal ou numeric para float ou real pode causar perda de precisão. Converter
de int, smallint, tinyint, float, real, money ou smallmoney para decimal ou numeric pode causar estouro.

Por padrão, o SQL Server usa arredondamento ao converter um número em um


valor decimal ou numeric com precisão e escala inferiores. Por outro lado, se a opção SET ARITHABORT for ON,
o SQL Server irá gerar um erro quando acontecer o estouro. Apenas a perda de precisão e escala não é suficiente
para gerar um erro.

Ao converter valores reais ou flutuantes em valores decimais ou numéricos, o valor decimal nunca terá mais
de 17 decimais. Qualquer valor flutuante < 5E-18 será sempre convertido em 0.

3
Exemplos

O exemplo a seguir cria uma tabela usando os tipos de dados decimal e numérico. Os valores são inseridos
em cada coluna. Os resultados são retornados usando uma instrução SELECT.

SQL
CREATE TABLE dbo.MyTable
(
MyDecimalColumn decimal(5,2)
,MyNumericColumn numeric(10,5)

);

GO
INSERT INTO dbo.MyTable VALUES (123, 12345.12);
GO
SELECT MyDecimalColumn, MyNumericColumn
FROM dbo.MyTable;

Aqui está o conjunto de resultados.

SQL
MyDecimalColumn MyNumericColumn
--------------------------------------- ---------------------------------------
123.00 12345.12000

(1 row(s) affected)

bit (Transact-SQL)
Um tipo de dados inteiro que pode aceitar um valor 1, 0 ou NULL.

Remarks

O Mecanismo de Banco de Dados do SQL Server otimiza o armazenamento de colunas bit. Se houver 8 ou
menos colunas bit em uma tabela, as colunas serão armazenadas como 1 byte. Se houver de 9 a 16 colunas bit, as
colunas serão armazenadas como 2 bytes, e assim por diante.

Os valores da cadeia de caracteres TRUE e FALSE podem ser convertidos para valores de bit: TRUE é
convertido para 1 e FALSE é convertido para 0.

A conversão em bit promove qualquer valor diferente de zero a 1.

money e smallmoney (Transact-SQL)


Tipos de dados que representam valores monetários ou de moeda.

Tipo de dados Intervalo Armazenamento


-922.337.203.685.477,5808 a 922.337.203.685.477,5807
(-922.337.203.685.477,58 a 922.337.203.685.477,58 para o
money 8 bytes
Informatica. O Informatica dá suporte apenas a dois decimais, não
quatro.)
smallmoney -214.748,3648 a 214.748,3647 4 bytes

4
Os tipos de dados money e smallmoney têm a precisão de dez milésimos das unidades monetárias que eles
representam. Para o Informatica, os tipos de dados money e smallmoneytêm a precisão de um centésimo das
unidades monetárias que eles representam.

Use um ponto para separar unidades monetárias parciais, como centavos, de unidades monetárias
inteiras. Por exemplo, 2.15 especifica 2 dólares e 15 centavos.

Esses tipos de dados podem usar qualquer um dos seguintes símbolos de moeda.

5
Os dados de moeda ou monetários não precisam ser incluídos entre aspas simples ( ' ). É importante lembrar
que apesar de você poder especificar valores monetários precedidos por um símbolo de moeda, o SQL Server não
armazena quaisquer informações de moeda associada com o símbolo, só armazena o valor numérico.

Convertendo dados money

Ao fazer a conversão em money de tipos de dados inteiro, presume-se que as unidades estejam em
unidades monetárias. Por exemplo, o valor inteiro 4 é convertido no equivalente de moneyde 4 unidades
monetárias.

O exemplo a seguir converte os valores smallmoney e money nos tipos de dados varchar e decimal,
respectivamente.

SQL
DECLARE @mymoney_sm smallmoney = 3148.29,
@mymoney money = 3148.29;
SELECT CAST(@mymoney_sm AS varchar) AS 'SM_MONEY varchar',
CAST(@mymoney AS decimal) AS 'MONEY DECIMAL';

Aqui está o conjunto de resultados.

SQL
SM_MONEY VARCHAR MONEY DECIMAL
------------------------------ ----------------------
3148.29 3148
(1 row(s) affected)

NUMÉRICOS APROXIMADOS

Flutuante (Float) e real (Transact-SQL)


Tipos de dados numéricos aproximados para uso com dados numéricos de ponto flutuante. Os dados de
ponto flutuante são aproximados; portanto, nem todos os valores no intervalo de tipo de dados podem ser
representados de maneira exata. O sinônimo ISO de real é float(24).

Sintaxe

float [ (n) ] em que n é o número de bits usado para armazenar a mantissa do número float na notação
científica e, portanto, exige a precisão e o tamanho do armazenamento. Se n for especificado, ele precisará ser um
valor entre 1 e 53. O valor padrão de n é 53.

Valor de n Precisão Tamanho de armazenamento


1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

Observação
SQL Server trata n como um dos dois valores possíveis. Se 1<=n<=24, n é tratado como 24.Se 25<=n<=53, n é
tratado como 53.

O tipo de dados float[(n)] do SQL Server está em conformidade com o padrão ISO para todos os valores
de n de 1 a 53. O sinônimo de double precision é float(53).

6
Remarks

Tipo de dados Intervalo Armazenamento


float - 1,79E+308 a -2,23E-308, 0 e 2,23E-308 a 1,79E+308 Depende do valor de n
real - 3,40E + 38 a -1,18E - 38, 0 e 1,18E - 38 a 3,40E + 38 4 bytes

Convertendo dados float e real

Os valores de float são truncados quando são convertidos em qualquer tipo de inteiro.

Quando desejar fazer a conversão de float ou real em dados de caractere, normalmente, é mais útil usar a
função de cadeia de caracteres STR do que CAST( ). Isso porque STR habilita mais controle nas formatações. Para
obter mais informações, consulte STR (Transact-SQL) e Funções (Transact-SQL).

A conversão de valores float que usam notação científica para decimal ou numeric é restrita a valores de
precisão de 17 dígitos apenas. Qualquer valor < 5E-18 é arredondado para 0.

CADEIAS DE CARACTERES

char e varchar (Transact-SQL)


Tipos de dados de caractere que sejam de comprimento fixo, char ou de comprimento variável, varchar. A
partir do Versão prévia do SQL Server 2019, quando uma ordenação habilitada por UTF-8 é usada, esses tipos de
dados armazenam o intervalo completo de dados de caractere Unicode e usam a codificação de caracteres UTF-8. Se
uma ordenação não UTF-8 for especificada, esses tipos de dados armazenarão apenas um subconjunto de caracteres
compatíveis com a página de código correspondente dessa ordenação.

Argumentos

char [ ( n ) ] Dados de cadeia de caracteres de comprimento fixo. n define o tamanho da cadeia de caracteres
em bytes e deve ser um valor entre 1 a 8.000. Para conjuntos de caracteres de codificação de byte único,
como Latino, o tamanho de armazenamento é n bytes e a quantidade de caracteres que pode ser armazenada
também é n. Para conjuntos de caracteres de codificação multibyte, o tamanho de armazenamento ainda
será n bytes, mas a quantidade de caracteres que pode ser armazenada pode ser menor que n. O sinônimo ISO
para char é character. Para saber mais sobre conjuntos de caracteres, consulte Conjuntos de caracteres multibyte e
de byte único.

varchar [ ( n | max ) ] dados de cadeia de caracteres de comprimento variável. n define o tamanho da cadeia
de caracteres em bytes e pode ser um valor entre 1 a 8.000. max indica que o tamanho de armazenamento máximo
é 2^31-1 bytes (2 GB). Para conjuntos de caracteres de codificação de byte único, como Latino, o tamanho de
armazenamento é n bytes + 2 bytes e a quantidade de caracteres que pode ser armazenada também é n. Para
codificação de conjuntos de caracteres multibyte, o tamanho de armazenamento ainda será n bytes + 2 bytes, mas a
quantidade de caracteres que pode ser armazenada pode ser menor que n. Os sinônimos ISO
para varchar são charvarying ou charactervarying. Para saber mais sobre conjuntos de caracteres,
consulte Conjuntos de caracteres multibyte e de byte único.

Remarks

Quando n não é especificado em uma definição de dados ou instrução de declaração de variável, o tamanho
padrão é 1. Se n não for especificado ao usar as funções CAST e CONVERT, o tamanho padrão será 30.

Os objetos que usam char ou varchar são atribuídos à ordenação padrão do banco de dados, a menos que
uma ordenação específica seja atribuída usando da cláusula COLLATE. A ordenação controla a página de código que
é usada para armazenar os dados de caractere.

7
As codificações multibyte no SQL Server incluem:

 Conjuntos de caracteres de byte duplo (DBCS) para alguns idiomas do Leste Asiático que usam páginas de
código 936 e 950 (chinês), 932 (japonês) ou 949 (coreano).

 UTF-8 com página de código 65001. Aplica-se a: SQL Server (Começando com Versão prévia do SQL Server
2019))

Se você tiver sites compatíveis com vários idiomas:

 A partir do Versão prévia do SQL Server 2019, considere o uso de uma ordenação habilitada para UTF-8 para
dar suporte a Unicode e minimizar os problemas de conversão de caracteres.

 Caso use uma versão inferior do Mecanismo de Banco de Dados do SQL Server, considere usar os tipos de
dados nchar ou nvarchar Unicode para minimizar problemas de conversão de caracteres.

Caso use char ou varchar, recomendamos que:

 Use char quando os tamanhos das entradas de dados de coluna forem consistentes.

 Use varchar quando os tamanhos das entradas de dados de coluna variarem consideravelmente.

 Use varchar(max) quando os tamanhos das entradas de dados de coluna variarem consideravelmente e o
tamanho da cadeia de caracteres puder exceder 8.000 bytes.

Se SET ANSI_PADDING for OFF quando CREATE TABLE ou ALTER TABLE for executada, uma coluna char definida
como NULL será tratada como varchar.

Aviso
Cada coluna varchar(max) ou nvarchar(max) não nula requer 24 bytes de alocação fixa adicional que conta para o
limite de linha de 8.060 bytes durante uma operação de classificação. Isso pode criar um limite implícito para o
número de colunas varchar(max) ou nvarchar(max) não nulas que podem ser criadas em uma tabela.
Nenhum erro especial é fornecido quando a tabela é criada (além do aviso comum de que o tamanho máximo da
linha excede o máximo permitido de 8.060 bytes) ou no momento da inserção de dados. Esse tamanho de linha
maior pode causar erros (por exemplo, o erro 512) durante algumas operações normais, como uma atualização de
chave de índice clusterizado ou classificações do conjunto de colunas completo, que os usuários podem prever até
que uma operação seja executada.

Convertendo dados de caractere

Quando são convertidas expressões character a um tipo de dados character de um tamanho diferente, os
valores muito longos para o novo tipo de dados são truncados. O tipo uniqueidentifier é considerado um tipo de
caractere para fins de conversão de uma expressão de caracteres e, portanto, está sujeito às regras de truncamento
de conversão em um tipo de caractere. Consulte a seção de Exemplos a seguir.

Quando uma expressão character é convertida em uma expressão character de um tipo de dados ou
tamanho diferente, como de char(5) em varchar(5) ou char(20) para char(15), a ordenação do valor de entrada é
atribuída ao valor convertido. Se uma expressão noncharacter for convertida em um tipo de dados character, a
ordenação padrão do banco de dados atual será atribuída ao valor convertido. Em qualquer caso, você pode atribuir
uma ordenação específica usando a cláusula COLLATE.

Observação
Há suporte para conversões de página de código em tipos de dados char e varchar, mas não no tipo de
dados text. Assim como em versões anteriores do SQL Server, a perda de dados não é informada durante as
conversões de página de código.

Expressões de caracteres que estão sendo convertidas a um tipo de dados numeric aproximado podem
incluir notação exponencial opcional. Esta notação é um e (minúsculo) ou um E (maiúsculo) seguido por um sinal de
mais (+) ou menos (-) opcional e, em seguida, de um número.
8
As expressões character que estão sendo convertidas a um tipo de dados numeric exato devem consistir em
dígitos, um ponto decimal e um sinal opcional de mais (+) ou menos (-). Os espaços em branco à esquerda são
ignorados. Na cadeia de caracteres não são permitidos separadores de vírgula, como o separador de milhar em
123,456.00.

As expressões character que estão sendo convertidas em tipo de dados money ou smallmoneytambém
podem incluir um separador decimal opcional e o sinal monetário ($). São permitidos separadores de vírgula, como
em $123,456.00.

Exemplos

A. Mostrando o valor padrão de n quando usado em declaração variável.

O exemplo a seguir mostra que o valor padrão de n é 1 para os tipos de dados char e varcharquando eles são
usados em uma declaração de variável.

SQL
DECLARE @myVariable AS varchar = 'abc';
DECLARE @myNextVariable AS char = 'abc';
--The following returns 1
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);
GO

b. Mostrando o valor padrão de n quando varchar é usado com CAST e CONVERT.

O exemplo a seguir mostra que o valor padrão de n é 30 quando os tipos de dados char ou varchar são usados com
as funções CAST e CONVERT.

SQL
DECLARE @myVariable AS varchar(40);
SET @myVariable = 'This string is longer than thirty characters';
SELECT CAST(@myVariable AS varchar);
SELECT DATALENGTH(CAST(@myVariable AS varchar)) AS 'VarcharDefaultLength';
SELECT CONVERT(char, @myVariable);
SELECT DATALENGTH(CONVERT(char, @myVariable)) AS 'VarcharDefaultLength';

C. Convertendo dados para fins de exibição

O exemplo a seguir converte duas colunas em tipos de caracteres e aplica um estilo que se aplica a um formato
específico aos dados exibidos. Um tipo money é convertido em dados de caractere e o estilo 1 é aplicado, o que
exibe os valores com vírgulas a cada três dígitos à esquerda do ponto decimal e dois dígitos à direita do ponto
decimal. Um tipo datetime é convertido em dados de caractere e o estilo 3 é aplicado, o que exibe os dados no
formato dd/mm/aa. Na cláusula WHERE, um tipo money é convertido em um tipo de caractere para executar uma
operação de comparação de cadeia de caracteres.

SQL
USE AdventureWorks2012;
GO
SELECT BusinessEntityID,
SalesYTD,
CONVERT (varchar(12),SalesYTD,1) AS MoneyDisplayStyle1,
GETDATE() AS CurrentDate,
CONVERT(varchar(12), GETDATE(), 3) AS DateDisplayStyle3
FROM Sales.SalesPerson
WHERE CAST(SalesYTD AS varchar(20) ) LIKE '1%';

9
Aqui está o conjunto de resultados.

SQL
BusinessEntityID SalesYTD DisplayFormat CurrentDate DisplayDateFormat
---------------------- -------------------- ----------------------- --------------------------------- --------------------------
278 1453719.4653 1,453,719.47 2011-05-07 14:29:01.193 07/05/11
280 1352577.1325 1,352,577.13 2011-05-07 14:29:01.193 07/05/11
283 1573012.9383 1,573,012.94 2011-05-07 14:29:01.193 07/05/11
284 1576562.1966 1,576,562.20 2011-05-07 14:29:01.193 07/05/11
285 172524.4512 172,524.45 2011-05-07 14:29:01.193 07/05/11
286 1421810.9242 1,421,810.92 2011-05-07 14:29:01.193 07/05/11
288 1827066 7118 1,827,066.71 2011-05-07 14:29:01.193 07/05/11

D. Convertendo dados Uniqueidentifer

O exemplo a seguir converte um valor uniqueidentifier em um tipo de dados char.

SQL
DECLARE @myid uniqueidentifier = NEWID();
SELECT CONVERT(char(255), @myid) AS 'char';

O exemplo a seguir demonstra o truncamento de dados quando o valor é muito longo para o tipo de dados
da conversão. Como o tipo uniqueidentifier é limitado a 36 caracteres, os caracteres que excedem esse
comprimento ficam truncados.

SQL
DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';
SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;

Aqui está o conjunto de resultados.

SQL
String TruncatedValue
-------------------------------------------- ------------------------------------
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0

(1 row(s) affected)

ntext, text e image


Tipos de dados fixos e de comprimento variável para armazenar dados binários e de caracteres não Unicode
e Unicode grandes. Dados Unicode usam o conjunto de caracteres UNICODE UCS-2.

IMPORTANTE: Os tipos de dados ntext, text e image serão removidos em uma versão futura do SQL Server. Evite
usar esses tipos de dados em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que os
utilizam atualmente. Em vez disso, use nvarchar(max), varchar(max)e varbinary(max) .

Argumentos

ntext
Dados Unicode de comprimento variável com um comprimento máximo de cadeia de caracteres de 2^30 - 1
(1.073.741.823) bytes. O tamanho de armazenamento, em bytes, é duas vezes o comprimento da cadeia de
caracteres inserido. O sinônimo ISO de ntext é national text.

text
Dados não Unicode de comprimento variável na página de código do servidor e com um comprimento máximo de
10
cadeia de caracteres de 2^31-1 (2.147.483.647). Quando a página de código de servidor usar caracteres de dois
bytes, o armazenamento ainda será de 2.147.483.647 bytes. Dependendo da cadeia de caracteres, o tamanho do
armazenamento pode ser menor que 2.147.483.647 bytes.

imagem
Dados binários do comprimento variável de 0 a 2^31-1 (2.147.483.647) bytes.

Remarks

As funções e instruções a seguir podem ser usadas com os dados ntext, text ou image.

Funções
Essa função retorna o número de bytes usado para representar qualquer
DATALENGTH (expression)
expressão.
Retorna a posição inicial da primeira ocorrência de um padrão em uma
PATINDEX ('%pattern%', expression) expressão específica ou zeros, se o padrão não for encontrado, em todos
os tipos de dados de caractere e de texto válidos.
Retorna parte de uma expressão de caractere, binária, de texto ou de
SUBSTRING (expression ,start , length)
imagem no SQL Server.
Retorna o valor do ponteiro de texto correspondente a uma
coluna text, ntext ou image em um formato varbinary. O valor do
TEXTPTR (column)
ponteiro de texto recuperado pode ser usado nas instruções READTEXT,
WRITETEXT e UPDATETEXT.
Uma função text, ntext ou image que verifica se um ponteiro de texto
TEXTVALID ('table.column' ,text_ ptr)
específico é válido.

Instruções
READTEXT {table.column Lê os valores text, ntext ou image de uma coluna text, ntext ou image. Começa
text_ptr offset size} lendo de um deslocamento especificado e lendo o número especificado de
[HOLDLOCK] bytes.
Especifica o tamanho dos
SET TEXTSIZE {number} dados varchar(max), nvarchar(max), varbinary(max), text, ntext e image retorn
ados por uma instrução SELECT.
UPDATETEXT [BULK] {
table_name.dest_column_na
me dest_text_ptr }
{ NULL | insert_offset }
Atualiza um campo text, ntext ou image existente. Use UPDATETEXT para alterar
{ NULL | delete_length }
apenas uma parte de uma coluna text, ntext ou image em vigor. Use WRITETEXT
[ WITH LOG ]
para atualizar e substituir todo um campo text, ntext ou image.
[ inserted_data
|{
table_name.src_column_nam
e src_text_ptr } ]
Permite a atualização interativa minimamente registrada de uma coluna
WRITETEXT [BULK]
de text, ntext ou imageexistente. WRITETEXT substitui quaisquer dados
{ table.column text_ptr }
existentes na coluna afetada. WRITETEXT não pode ser usado em colunas
[ WITH LOG ] { data }
de text, ntext e image em exibições.

CADEIAS DE CARACTERES UNICODE

nchar e nvarchar (Transact-SQL)


Tipos de dados de caractere que sejam de comprimento fixo, nchar ou de comprimento variável, nvarchar. A
partir do SQL Server 2012 (11.x), quando uma ordenação habilitada por Caractere Suplementar (SC) é usada, esses
tipos de dados armazenam o intervalo completo de dados de caractere Unicode e usam a codificação de
11
caracteres UTF-16 . Se uma ordenação não SC for especificada, então esses tipos de dados armazenarão somente o
subconjunto de dados de caractere compatíveis com a codificação de caracteres UCS-2.

Argumentos

nchar [ ( n ) ]

Dados de cadeia de caracteres de comprimento fixo. n define o tamanho da cadeia de caracteres em pares-
byte e deve ser um valor entre 1 a 4.000. O tamanho do armazenamento é duas vezes n bytes. Para a
codificação UCS-2, o tamanho de armazenamento é duas vezes n bytes e a quantidade de caracteres que pode ser
armazenada também é n. Para a codificação UTF-16, o tamanho de armazenamento ainda é duas vezes n bytes, mas
a quantidade de caracteres que pode ser armazenada pode ser menor que n porque os Caracteres Suplementares
usam dois pares-byte (também chamados de par alternativo). Os sinônimos ISO para nchar são char
nacional e caractere nacional.

nvarchar [ ( n | max ) ]

Dados de cadeia de caracteres de comprimento variável. n define o tamanho da cadeia de caracteres em


pares-byte e pode ser um valor entre 1 a 4.000. max indica que o tamanho de armazenamento máximo é de 2^30-1
caracteres (2 GB). O tamanho do armazenamento é duas vezes n bytes + 2 bytes. Para a codificação UCS-2, o
tamanho de armazenamento é duas vezes nbytes + 2 bytes e a quantidade de caracteres que pode ser armazenada
também é n. Para a codificação UTF-16, o tamanho de armazenamento ainda é duas vezes n bytes + 2 bytes, mas a
quantidade de caracteres que pode ser armazenada pode ser menor que n porque os Caracteres Suplementares
usam dois pares-byte (também chamados de par alternativo). Os sinônimos ISO para nvarchar são national char
varying e national character varying.

Remarks

Quando n não é especificado em uma definição de dados ou instrução de declaração de variável, o tamanho
padrão é 1. Quando n não é especificado com a função CAST, o tamanho padrão é 30.

Se você usar nchar ou nvarchar, recomendamos que:

 Use nchar quando os tamanhos das entradas de dados de coluna forem consistentes.

 Use nvarchar quando os tamanhos das entradas de dados de coluna variarem consideravelmente.

 Use nvarchar(max) quando os tamanhos das entradas de dados de coluna variarem consideravelmente e o
tamanho da cadeia de caracteres puder exceder 4.000 pares-bytes.

sysname é um tipo de dados definido pelo usuário e fornecido pelo sistema que é funcionalmente equivalente
a nvarchar(128), com exceção de que não permite valor nulo.sysname é usado para referenciar nomes de objetos de
banco de dados.

Os objetos que usam nchar ou nvarchar recebem a ordenação padrão do banco de dados, a menos que uma
ordenação específica seja atribuída com o uso da cláusula COLLATE.

SET ANSI_PADDING é sempre ON para nchar e nvarchar. SET ANSI_PADDING OFF não se aplica aos tipos de
dados nchar ou nvarchar.

Prefixe uma constante de cadeia de caracteres Unicode com a letra N para sinalizar a entrada UCS-2 ou UTF-16,
dependendo de se uma ordenação SC for ou não usada. Sem o prefixo N, a cadeia de caracteres é convertida para a
página de código padrão do banco de dados, que talvez não reconheça determinados caracteres. A partir do Versão
prévia do SQL Server 2019, quando uma ordenação habilitada por UTF-8 é usada, a página de código padrão é capaz
de armazenar um conjunto de caracteres UNICODE UTF-8.

Observação
Ao prefixar uma constante de cadeia de caracteres com a letra N, a conversão implícita resultará em uma cadeia
de caracteres UCS-2 ou UTF-16, caso a constante a ser convertida não exceda o tamanho máximo para o tipo de

12
dados de cadeia de caracteres nvarchar (4.000). Caso contrário, a conversão implícita resultará em um nvarchar
de valor grande (max).

Aviso
Cada coluna varchar(max) ou nvarchar(max) não nula requer 24 bytes de alocação fixa adicional, que conta para
o limite de linhas de 8.060 bytes durante uma operação de classificação. Esses bytes adicionais podem criar um
limite implícito para o número de colunas varchar(max) ou nvarchar(max) não nulas em uma tabela. Nenhum
erro especial é fornecido quando a tabela é criada (além do aviso comum de que o tamanho máximo da linha
excede o máximo permitido de 8.060 bytes) ou no momento da inserção de dados.Esse grande tamanho de linha
pode causar erros (como o erro 512) imprevistos pelos usuários durante algumas operações normais. Dois
exemplos de operações são uma atualização de chave de índice clusterizado ou classificações do conjunto de
colunas completo.

Convertendo dados character

Para obter informações sobre como converter dados de caractere, consulte char e varchar (Transact-SQL).

ntext, text e image (Transact-SQL)


Tipos de dados fixos e de comprimento variável para armazenar dados binários e de caracteres não Unicode
e Unicode grandes. Dados Unicode usam o conjunto de caracteres UNICODE UCS-2.

IMPORTANTE: Os tipos de dados ntext, text e image serão removidos em uma versão futura do SQL Server. Evite
usar esses tipos de dados em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que os
utilizam atualmente. Em vez disso, use nvarchar(max), varchar(max)e varbinary(max) .

Argumentos

Ntext

Dados Unicode de comprimento variável com um comprimento máximo de cadeia de caracteres de 2^30 - 1
(1.073.741.823) bytes. O tamanho de armazenamento, em bytes, é duas vezes o comprimento da cadeia de
caracteres inserido. O sinônimo ISO de ntext é national text.

Text

Dados não Unicode de comprimento variável na página de código do servidor e com um comprimento
máximo de cadeia de caracteres de 2^31-1 (2.147.483.647). Quando a página de código de servidor usar caracteres
de dois bytes, o armazenamento ainda será de 2.147.483.647 bytes. Dependendo da cadeia de caracteres, o
tamanho do armazenamento pode ser menor que 2.147.483.647 bytes.

Imagem

Dados binários do comprimento variável de 0 a 2^31-1 (2.147.483.647) bytes.

CADEIA DE CARACTERES BINÁRIA

binary e varbinary (Transact-SQL)


Tipos de dados binários de comprimento fixo ou comprimento variável.

13
Argumentos

 binary [ ( n ) ] Dados binários de comprimento fixo com um tamanho de n bytes, em que n é um valor de 1 a
8.000. O tamanho do armazenamento é n bytes.

 varbinary [ ( n | max) ] Dados binários de tamanho variável. n pode ser um valor de 1 a 8.000.max indica que
o tamanho de armazenamento máximo é de 2^31-1 bytes. O tamanho do armazenamento é o tamanho real
dos dados inseridos + 2 bytes. Os dados inseridos podem ter 0 bytes de comprimento. O sinônimo ANSI SQL
para varbinary é binary varying.

Remarks

O tamanho padrão é 1 quando n não é especificado em uma definição de dados ou instrução de declaração
de variável. Quando n não é especificado com a função CAST, o tamanho padrão é 30.

Tipo de dados Use quando...


binary os tamanhos das entradas de dados de coluna forem consistentes.
varbinary os tamanhos das entradas de dados de coluna variarem consideravelmente.
varbinary(max) as entradas de dados de coluna excederem 8.000 bytes.

Convertendo dados binary e varbinary

Quando são convertidos dados de um tipo de dados String em um tipo de dados binary ou varbinary de
tamanho diferente, o SQL Server preenche ou trunca os dados à direita. Esses tipos de dados de cadeia de caracteres
são:

 char

 varchar

 nchar

 nvarchar

 binary

 varbinary

 text

 ntext

 imagem

Quando outros tipos de dados são convertidos em binary ou varbinary, os dados são preenchidos ou truncados
à esquerda. O preenchimento é realizado por meio de zeros hexadecimais.

A conversão de dados em tipos de dados binary e varbinary é útil se os dados binary são a maneira mais fácil de
mover os dados. Em algum momento, você pode converter um tipo de valor em um valor binário de tamanho
grande o suficiente e, em seguida, convertê-lo novamente. Essa conversão sempre resultará no mesmo valor se
ambas as conversões estiverem acontecendo na mesma versão de SQL Server. A representação binária de um valor
pode ser alterada de uma versão para outra do SQL Server.

Você pode converter int, smallint e tinyint em binary ou varbinary. Se converter o valor binaryde volta para um
valor inteiro, esse valor será diferente do valor inteiro original se houver truncamento. Por exemplo, a instrução
SELECT a seguir mostra que o valor inteiro 123456 é armazenado como um binário 0x0001e240:

SQL
SELECT CAST( 123456 AS BINARY(4) );

14
Entretanto, a seguinte instrução SELECT mostra que se o destino binary for muito pequeno para manter o valor
inteiro, os dígitos à esquerda serão silenciosamente truncados, de forma que o mesmo número seja armazenado
como 0xe240:

SQL
SELECT CAST( 123456 AS BINARY(2) );

O lote seguinte mostra que esse truncamento silencioso pode afetar operações aritméticas sem gerar um erro:

SQL
DECLARE @BinaryVariable2 BINARY(2);

SET @BinaryVariable2 = 123456;


SET @BinaryVariable2 = @BinaryVariable2 + 1;

SELECT CAST( @BinaryVariable2 AS INT);


GO

O resultado final é 57921, não 123457.

Observação
As conversões entre qualquer tipo de dados e os tipos de dados binary não têm garantia de serem as mesmas
entre as versões do SQL Server.

ntext, text e image (Transact-SQL)


Tipos de dados fixos e de comprimento variável para armazenar dados binários e de caracteres não Unicode
e Unicode grandes. Dados Unicode usam o conjunto de caracteres UNICODE UCS-2.

IMPORTANTE: Os tipos de dados ntext, text e image serão removidos em uma versão futura do SQL Server. Evite
usar esses tipos de dados em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que os
utilizam atualmente. Em vez disso, use nvarchar(max), varchar(max)e varbinary(max) .

Argumentos

ntext

Dados Unicode de comprimento variável com um comprimento máximo de cadeia de caracteres de 2^30 - 1
(1.073.741.823) bytes. O tamanho de armazenamento, em bytes, é duas vezes o comprimento da cadeia de
caracteres inserido. O sinônimo ISO de ntext é national text.

text

Dados não Unicode de comprimento variável na página de código do servidor e com um comprimento
máximo de cadeia de caracteres de 2^31-1 (2.147.483.647). Quando a página de código de servidor usar caracteres
de dois bytes, o armazenamento ainda será de 2.147.483.647 bytes. Dependendo da cadeia de caracteres, o
tamanho do armazenamento pode ser menor que 2.147.483.647 bytes.

imagem

Dados binários do comprimento variável de 0 a 2^31-1 (2.147.483.647) bytes.

15