Iniciando finalmente o conteúdo programático previsto para o Exame 70-461 (você pode conferir o conteúdo completo aqui), vamos abordar hoje a sintaxe T-SQL para a criação e alteração de tabelas. O candidato precisa estar consciente de que é necessário saber script – “nada de janelinhas e facilidades”, pois é isso que predomina nas provas de certificação SQL Server.

 

Preparando o ambiente

Durante este e nos próximos posts referentes ao exame 70-461 estarei utilizando o banco “DBExame70461”. Para criar o banco execute o código abaixo:

use master
GO

if db_id(‘DBExame70461’) IS NULL
BEGIN
CREATE DATABASE DBExame70461;
ALTER DATABASE DBExame70461 SET RECOVERY SIMPLE;
END;

Cenário 1 – Criação

Você é DBA Junior na empresa XPTO. O seu gerente solicita que você crie uma tabela no banco DBExame70461, usando T-SQL, conforme especificações abaixo:

Tabela: Empregado

image

Mas qual é a sintaxe para a criação de tabelas? Segue a sintaxe resumida:

CREATE TABLE   [ schema_name ] . table_name
( { <column_definition> | <computed_column_definition>
| <column_set_definition> | [ <table_constraint> ] [ ,…n ] } )
[ ON { partition_scheme_name ( partition_column_name ) | filegroup  | “default” } ]
[ WITH ( <table_option> [ ,…n ] ) ]
[ ; ]

Para a sintaxe completa consulte este link.

Vejamos então como fica o script para a criação da tabela:

use DBExame70461
go

CREATE TABLE Empregado
(    ID INT NOT NULL PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Sexo CHAR(10) NOT NULL,
Cidade VARCHAR(10),
[UF] CHAR(2) NULL,
[Matricula] CHAR(7) NOT NULL,
[Login] VARCHAR(10),
);

 

Atente para alguns detalhes desse código de criação:

  • A coluna “Cidade”, conforme especificação do gerente, aceita NULL (não é obrigatória). Veja que criei a coluna e não explicitei o NULL. Quando não explicitamos NULL ou NOT NULL para uma coluna, então será usado o comportamento default do SQL Server, que é justamente aceitar nulos;
  • Note que para as colunas UF, Matricula e Login utilizei colchetes. Os colchetes podem ser usados para a criação de Alias de colunas em instruções SELECT (veremos isso em outro post),  e também quando criamos objetos usando palavras reservadas. No nosso cenário, como a palavra “Login” é reservada pelo SQL Server para propósitos internos, fez-se necessário o uso de colchetes. Se você retirar os colchetes da coluna “Login” e tentar a criar a tabela então um erro será disparado. Para as colunas UF e Matricula os colchetes não fazem qualquer diferença.

Agora uma pegadinha: é possível criar uma coluna com o seguinte nome (note os espaços em branco) : “Endereco do Empregado” ? A resposta é SIM, graças aos colchetes. O código a seguir é válido:

CREATE TABLE Endereco
(    ID INT NOT NULL PRIMARY KEY,
[Endereco do Empregado] varchar(50)
);

Nota: jamais faça isso na vida real (eca!).

Cenário 2 – Alteração

Após revisão de requisitos, o gerente pede para você realizar as seguintes alterações na tabela, usando T-SQL:

  1. Dropar a coluna [Login];
  2. Alterar a coluna UF de NULL para NOT NULL;
  3. Alterar o tamanho da coluna Cidade de VARCHAR(10) para VARCHAR(50);
  4. Incluir a coluna: Email VARCHAR(50) NULL.

Neste ponto faço uma pergunta: é possível realizar todas as mudanças na tabela executando uma única instrução DDL? A resposta é NÃO.

Segue as modificações na estrutura da tabela:

— 1. Dropar a coluna [Login]
ALTER TABLE Empregado
DROP COLUMN [Login];

— 2. Alterar a coluna UF de NULL para NOT NULL
ALTER TABLE Empregado
ALTER COLUMN UF CHAR(2) NOT NULL;

— 3. Alterar o tamanho da coluna Cidade de VARCHAR(10) para VARCHAR(50);
ALTER TABLE Empregado
ALTER COLUMN Cidade VARCHAR(50);

— 4. Incluir a coluna: Email VARCHAR(50) NULL.
ALTER TABLE Empregado
ADD Email VARCHAR(50);

Perceba que para adicionar uma coluna basta escrever ADD seguido do nome da coluna e seu respectivo tipo. Não existe ADD COLUMN (e isso pode cair na prova), apenas ALTER COLUMN.

Para a sintaxe completa de ALTER TABLE consulte este link.

Conclusão e Dica Final

Teremos um tópico específico sobre constraints brevemente e, por conta disso, não falamos nada a respeito. A recomendação que deixo é: pratique bastante; crie e recrie tabelas. Como dica deixo o Template Explorer do SQL Server Management Studio – vá até o menu View – Template Explorer. Este é um recurso que traz dezenas de templates que pode ajudar no processo de aprendizagem.

image

Iniciando finalmente o conteúdo programático previsto para o Exame 70-461 (você pode conferir o conteúdo completo aqui), vamos abordar hoje a sintaxe T-SQL para a criação e alteração de tabelas. O candidato precisa estar consciente de que é necessário saber script – “nada de janelinhas e facilidades”, pois é isso que predomina nas provas de certificação SQL Server.

 

Preparando o ambiente

Durante este e nos próximos posts referentes ao exame 70-461 estarei utilizando o banco “DBExame70461”. Para criar o banco execute o código abaixo:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”dXNlIG1hc3RlcgpHTwoKaWYgZGJfaWQo4oCYREJFeGFtZTcwNDYx4oCZKSBJUyBOVUxMCkJFR0lOCkNSRUFURSBEQVRBQkFTRSBEQkV4YW1lNzA0NjE7CkFMVEVSIERBVEFCQVNFIERCRXhhbWU3MDQ2MSBTRVQgUkVDT1ZFUlkgU0lNUExFOwpFTkQ7″ hover_enabled=”0″]dXNlIG1hc3RlcgpHTwoKaWYgZGJfaWQo4oCYREJFeGFtZTcwNDYx4oCZKSBJUyBOVUxMCkJFR0lOCkNSRUFURSBEQVRBQkFTRSBEQkV4YW1lNzA0NjE7CkFMVEVSIERBVEFCQVNFIERCRXhhbWU3MDQ2MSBTRVQgUkVDT1ZFUlkgU0lNUExFOwpFTkQ7[/et_pb_dmb_code_snippet]

Cenário 1 – Criação

Você é DBA Junior na empresa XPTO. O seu gerente solicita que você crie uma tabela no banco DBExame70461, usando T-SQL, conforme especificações abaixo:

Tabela: Empregado

IMAGEM – imageimage

Mas qual é a sintaxe para a criação de tabelas? Segue a sintaxe resumida:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”Q1JFQVRFIFRBQkxFICAgWyBzY2hlbWFfbmFtZSBdIC4gdGFibGVfbmFtZQooIHsgPGNvbHVtbl9kZWZpbml0aW9uPiB8IDxjb21wdXRlZF9jb2x1bW5fZGVmaW5pdGlvbj4KfCA8Y29sdW1uX3NldF9kZWZpbml0aW9uPiB8IFsgPHRhYmxlX2NvbnN0cmFpbnQ+IF0gWyAs4oCmbiBdIH0gKQpbIE9OIHsgcGFydGl0aW9uX3NjaGVtZV9uYW1lICggcGFydGl0aW9uX2NvbHVtbl9uYW1lICkgfCBmaWxlZ3JvdXAgIHwg4oCcZGVmYXVsdOKAnSB9IF0KWyBXSVRIICggPHRhYmxlX29wdGlvbj4gWyAs4oCmbiBdICkgXQpbIDsgXQ==” hover_enabled=”0″]Q1JFQVRFIFRBQkxFICAgWyBzY2hlbWFfbmFtZSBdIC4gdGFibGVfbmFtZQooIHsgPGNvbHVtbl9kZWZpbml0aW9uPiB8IDxjb21wdXRlZF9jb2x1bW5fZGVmaW5pdGlvbj4KfCA8Y29sdW1uX3NldF9kZWZpbml0aW9uPiB8IFsgPHRhYmxlX2NvbnN0cmFpbnQ+IF0gWyAs4oCmbiBdIH0gKQpbIE9OIHsgcGFydGl0aW9uX3NjaGVtZV9uYW1lICggcGFydGl0aW9uX2NvbHVtbl9uYW1lICkgfCBmaWxlZ3JvdXAgIHwg4oCcZGVmYXVsdOKAnSB9IF0KWyBXSVRIICggPHRhYmxlX29wdGlvbj4gWyAs4oCmbiBdICkgXQpbIDsgXQ==[/et_pb_dmb_code_snippet]

Para a sintaxe completa consulte este link.

Vejamos então como fica o script para a criação da tabela:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”dXNlIERCRXhhbWU3MDQ2MQpnbwoKQ1JFQVRFIFRBQkxFIEVtcHJlZ2FkbwooICAgIElEIElOVCBOT1QgTlVMTCBQUklNQVJZIEtFWSwKTm9tZSBWQVJDSEFSKDUwKSBOT1QgTlVMTCwKU2V4byBDSEFSKDEwKSBOT1QgTlVMTCwKQ2lkYWRlIFZBUkNIQVIoMTApLApbVUZdIENIQVIoMikgTlVMTCwKW01hdHJpY3VsYV0gQ0hBUig3KSBOT1QgTlVMTCwKW0xvZ2luXSBWQVJDSEFSKDEwKSwKKTs=” hover_enabled=”0″]dXNlIERCRXhhbWU3MDQ2MQpnbwoKQ1JFQVRFIFRBQkxFIEVtcHJlZ2FkbwooICAgIElEIElOVCBOT1QgTlVMTCBQUklNQVJZIEtFWSwKTm9tZSBWQVJDSEFSKDUwKSBOT1QgTlVMTCwKU2V4byBDSEFSKDEwKSBOT1QgTlVMTCwKQ2lkYWRlIFZBUkNIQVIoMTApLApbVUZdIENIQVIoMikgTlVMTCwKW01hdHJpY3VsYV0gQ0hBUig3KSBOT1QgTlVMTCwKW0xvZ2luXSBWQVJDSEFSKDEwKSwKKTs=[/et_pb_dmb_code_snippet]

Atente para alguns detalhes desse código de criação:

  • A coluna “Cidade”, conforme especificação do gerente, aceita NULL (não é obrigatória). Veja que criei a coluna e não explicitei o NULL. Quando não explicitamos NULL ou NOT NULL para uma coluna, então será usado o comportamento default do SQL Server, que é justamente aceitar nulos;
  • Note que para as colunas UF, Matricula e Login utilizei colchetes. Os colchetes podem ser usados para a criação de Alias de colunas em instruções SELECT (veremos isso em outro post),  e também quando criamos objetos usando palavras reservadas. No nosso cenário, como a palavra “Login” é reservada pelo SQL Server para propósitos internos, fez-se necessário o uso de colchetes. Se você retirar os colchetes da coluna “Login” e tentar a criar a tabela então um erro será disparado. Para as colunas UF e Matricula os colchetes não fazem qualquer diferença.

Agora uma pegadinha: é possível criar uma coluna com o seguinte nome (note os espaços em branco) : “Endereco do Empregado” ? A resposta é SIM, graças aos colchetes. O código a seguir é válido:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”Q1JFQVRFIFRBQkxFIEVuZGVyZWNvCiggICAgSUQgSU5UIE5PVCBOVUxMIFBSSU1BUlkgS0VZLApbRW5kZXJlY28gZG8gRW1wcmVnYWRvXSB2YXJjaGFyKDUwKQopOw==” hover_enabled=”0″]Q1JFQVRFIFRBQkxFIEVuZGVyZWNvCiggICAgSUQgSU5UIE5PVCBOVUxMIFBSSU1BUlkgS0VZLApbRW5kZXJlY28gZG8gRW1wcmVnYWRvXSB2YXJjaGFyKDUwKQopOw==[/et_pb_dmb_code_snippet]

Nota: jamais faça isso na vida real (eca!).

Cenário 2 – Alteração

Após revisão de requisitos, o gerente pede para você realizar as seguintes alterações na tabela, usando T-SQL:

  1. Dropar a coluna [Login];
  2. Alterar a coluna UF de NULL para NOT NULL;
  3. Alterar o tamanho da coluna Cidade de VARCHAR(10) para VARCHAR(50);
  4. Incluir a coluna: Email VARCHAR(50) NULL.

Neste ponto faço uma pergunta: é possível realizar todas as mudanças na tabela executando uma única instrução DDL? A resposta é NÃO.

Segue as modificações na estrutura da tabela:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”4oCUIDEuIERyb3BhciBhIGNvbHVuYSBbTG9naW5dCkFMVEVSIFRBQkxFIEVtcHJlZ2FkbwpEUk9QIENPTFVNTiBbTG9naW5dOwoK4oCUIDIuIEFsdGVyYXIgYSBjb2x1bmEgVUYgZGUgTlVMTCBwYXJhIE5PVCBOVUxMCkFMVEVSIFRBQkxFIEVtcHJlZ2FkbwpBTFRFUiBDT0xVTU4gVUYgQ0hBUigyKSBOT1QgTlVMTDsKCuKAlCAzLiBBbHRlcmFyIG8gdGFtYW5obyBkYSBjb2x1bmEgQ2lkYWRlIGRlIFZBUkNIQVIoMTApIHBhcmEgVkFSQ0hBUig1MCk7CkFMVEVSIFRBQkxFIEVtcHJlZ2FkbwpBTFRFUiBDT0xVTU4gQ2lkYWRlIFZBUkNIQVIoNTApOwoK4oCUIDQuIEluY2x1aXIgYSBjb2x1bmE6IEVtYWlsIFZBUkNIQVIoNTApIE5VTEwuCkFMVEVSIFRBQkxFIEVtcHJlZ2FkbwpBREQgRW1haWwgVkFSQ0hBUig1MCk7″ hover_enabled=”0″]4oCUIDEuIERyb3BhciBhIGNvbHVuYSBbTG9naW5dCkFMVEVSIFRBQkxFIEVtcHJlZ2FkbwpEUk9QIENPTFVNTiBbTG9naW5dOwoK4oCUIDIuIEFsdGVyYXIgYSBjb2x1bmEgVUYgZGUgTlVMTCBwYXJhIE5PVCBOVUxMCkFMVEVSIFRBQkxFIEVtcHJlZ2FkbwpBTFRFUiBDT0xVTU4gVUYgQ0hBUigyKSBOT1QgTlVMTDsKCuKAlCAzLiBBbHRlcmFyIG8gdGFtYW5obyBkYSBjb2x1bmEgQ2lkYWRlIGRlIFZBUkNIQVIoMTApIHBhcmEgVkFSQ0hBUig1MCk7CkFMVEVSIFRBQkxFIEVtcHJlZ2FkbwpBTFRFUiBDT0xVTU4gQ2lkYWRlIFZBUkNIQVIoNTApOwoK4oCUIDQuIEluY2x1aXIgYSBjb2x1bmE6IEVtYWlsIFZBUkNIQVIoNTApIE5VTEwuCkFMVEVSIFRBQkxFIEVtcHJlZ2FkbwpBREQgRW1haWwgVkFSQ0hBUig1MCk7[/et_pb_dmb_code_snippet]

Perceba que para adicionar uma coluna basta escrever ADD seguido do nome da coluna e seu respectivo tipo. Não existe ADD COLUMN (e isso pode cair na prova), apenas ALTER COLUMN.

Para a sintaxe completa de ALTER TABLE consulte este link.

Conclusão e Dica Final

Teremos um tópico específico sobre constraints brevemente e, por conta disso, não falamos nada a respeito. A recomendação que deixo é: pratique bastante; crie e recrie tabelas. Como dica deixo o Template Explorer do SQL Server Management Studio – vá até o menu View – Template Explorer. Este é um recurso que traz dezenas de templates que pode ajudar no processo de aprendizagem.

IMAGEM – imageimage