Академический Документы
Профессиональный Документы
Культура Документы
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:
Observação
sp_help retorna -1 como o comprimento dos tipos de dados de valor grande e xml.
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.
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).
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 ;
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
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
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.
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.
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.
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;
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.
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.
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';
SQL
SM_MONEY VARCHAR MONEY DECIMAL
------------------------------ ----------------------
3148.29 3148
(1 row(s) affected)
NUMÉRICOS APROXIMADOS
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.
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
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
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))
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.
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.
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
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
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';
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
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;
SQL
String TruncatedValue
-------------------------------------------- ------------------------------------
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0
(1 row(s) affected)
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.
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 ) ]
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.
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.
Para obter informações sobre como converter dados de caractere, consulte char e varchar (Transact-SQL).
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
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.
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);
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.
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
15