Responda rápido, qual o resultado deste SELECT:
DECLARE @teste varchar(40)
SET @teste = '1111111111222222222233333333334444444444'
go
SELECT CONVERT(varchar, @teste)
-- OU
SELECT CAST(@teste as varchar)
Se você respondeu '1' ou '1111111111222222222233333333334444444444', errou.
Quando não se informa o tamanho do datatype de uma variável do tipo varchar, o padrão é sempre 30. Ou seja, a resposta correta é '111111111122222222223333333333'.
Então, ao criar uma tabela não se especificar o tamanho campo de tipo varchar, seria 30 também? Este INSERT seria possível?
CREATE TABLE #teste (campo varchar)
INSERT INTO #teste VALUES ('111111111122222222223333333333')
Erro:
String or binary data would be truncated.
The statement has been terminated.
Não, quando não se especifica tamanho de uma coluna do tipo varchar, o tamanho default é 1. Portanto:
CREATE TABLE #teste (campo varchar)
GO
INSERT INTO #teste VALUES ('1');
SELECT * FROM #teste
campo
-----
1
(1 row(s) affected)
Referência: http://msdn.microsoft.com/en-us/library/ms176089%28SQL.90%29.aspx
Para finalizar, apenas como curiosidade, é possível criar uma variável ou campo em uma tabela informando um sinônimo de tipo de dados. Exemplos:
DECLARE @nome character varying(20)
SET @nome = 'Renata'
SELECT @nome
-- e ainda
CREATE TABLE #teste (
id integer,
nome character varying(40),
salario double precision
)
GO
INSERT INTO #teste (id, nome, salario) VALUES (1,'Maria', 5230.5)
GO
Neste exemplo, ao invés de int, foi colocado integer. No lugar de varchar, character varying. E no lugar de float, foi colocado double precision.
Ao verificar a estrutura da tabela criada, ela foi criada conforme o tipo de dados de sistema do SQL Server.
USE tempdb
go
SP_HELP #teste
Resultado:
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
--------------- ------------------- ----------- ------- ------- ------- ----------- ------------------- ----------------------- -----------------------------
id int no 4 10 0 yes (n/a) (n/a) NULL
nome varchar no 40 yes no yes SQL_Latin1_General_CP1_CI_AS
salario float no 8 53 NULL yes (n/a) (n/a) NULL
A lista completa de sinônimos se encontra aqui: http://msdn.microsoft.com/en-usprecision/library/ms177566%28SQL.90%29.aspxstyle
0 comentários:
Postar um comentário