0% acharam este documento útil (0 voto)
184 visualizações

Resumo SQL

O documento fornece uma introdução aos principais conceitos e ferramentas do SQL Server, incluindo: 1) Uma visão geral do SQL Server e suas principais ferramentas como Enterprise Manager e Query Analyzer. 2) Explica os conceitos básicos de banco de dados relacional como tabelas, registros, campos e índices. 3) Descreve a arquitetura do SQL Server incluindo bancos de dados do sistema, tabelas do sistema e procedimentos armazenados.

Enviado por

z0i0z
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
184 visualizações

Resumo SQL

O documento fornece uma introdução aos principais conceitos e ferramentas do SQL Server, incluindo: 1) Uma visão geral do SQL Server e suas principais ferramentas como Enterprise Manager e Query Analyzer. 2) Explica os conceitos básicos de banco de dados relacional como tabelas, registros, campos e índices. 3) Descreve a arquitetura do SQL Server incluindo bancos de dados do sistema, tabelas do sistema e procedimentos armazenados.

Enviado por

z0i0z
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 43

RESUMO APOSTILA SQL SERVER

1 - Introdução

Visão Geral do SQL Server


O SQL Server é um sistema de gerenciamento de bancos de dados cliente/servidor, vem com
várias ferramentas de administração que podem ser executadas a partir de um servidor
Windows NT, de uma estação Windows NT Workstation, ou até mesmo a partir do Windows
95/98. As mais usadas são:

• Enterprise Manager: Gerencia vários servidores, permitindo executar qualquer tarefa


relacionada ao SQL Server.

• Service Manager: Permite iniciar, pausar, continuar e finalizar os serviços do SQL Server.

• Query Analyzer: Permite utilizar diretamente o SQL Server usando comandos SQL. Os
comandos SQL podem ser executados interativamente, ou podem ser executados de
procedimentos armazenados ou scripts.

• Profiler: permite monitorar toda a atividade do servidor e registrar essa atividade em arquivos
de log, incluindo comandos SQL executados pelo servidor.

• Performance Monitor: Permite monitorar o desempenho do SQL Server.

• SQL Server Books Online: Permite consultar a documentação do SQL Server.

Sistemas Gerenciadores de Banco de Dados


Um sistema gerenciador de banco de dados (SGBD) como o SQL Server é responsável por
armazenar dados de forma confiável e permitir fácil recuperação e atualização desses dados.
Um SGBD relacional armazena dados de forma relacional, isto é na forma de linhas e colunas.
Conceitos Relacionais
Um registro ou linha é um grupo de variáveis com tipos de dados diferentes, que armazenam
dados relacionados. Por exemplo, um registro pode conter os dados relativos a um produto
vendido pela empresa, como descrição, código de identificação, quantidade em estoque.
1
RESUMO APOSTILA SQL SERVER

Um campo ou coluna é um item de informação dentro de uma linha da tabela, como a


descrição da informação.

Uma tabela é um conjunto de linhas com a mesma estrutura, armazenados de forma


permanente em disco.As tabelas são compostas de linhas e colunas.

Um banco de dados é um conjunto de tabelas que contêm dados relacionados. Por exemplo,
um sistema de contas a pagar poderia ter um banco de dados de contas a pagar, com uma
tabela de duplicatas, uma tabela de bancos, uma tabela de contas etc.

Um índice é uma estrutura de dados que permite pesquisar rapidamente por linhas em uma
tabela, dado o valor de uma determinada coluna ou colunas da tabela. Um índice primário ou
chave primária define um valor único, que não pode ser repetido em outras linhas da tabela.
Uma query é um pedido de pesquisa no banco de dados, que permite obter dados de uma
tabela ou de várias tabelas, especificando as condições de seleção.

Desktop x Cliente/Servidor
O acesso a informações em sistemas de processamento de dados (DESKTOP) isto é, que não
utilizam Sistemas Gerenciadores de Bancos de Dados (SGDB) é feito pelo acesso seqüencial a
um ou mais arquivos. Cabe ao programador criar mecanismos de recuperação da informação.
Com a utilização de um Gerenciador de Banco de Dado, porém, o acesso fica diferente: pede-
se as informações ao gerenciador de banco de dados e elas são fornecidas pelo mesmo. O
SQL Server, como já foi dito, é um sistema de gerenciamento de bancos de dados
cliente/servidor.

2
RESUMO APOSTILA SQL SERVER

2 - Fundamentos de arquitetura do SQL Server

O Catálogo do Sistema
Um banco de dados contém uma coleção de tabelas e outros objetos relacionados. Existem
dois tipos de banco de dados: os bancos de dados do sistema são usados pelo SQL Server
para operar e gerenciar o sistema e os bancos de dados dos usuários são usados para
armazenar os dados dos usuários. O catálogo do sistema é composto de tabelas no banco de
dados master.

Bancos de Dados do Sistema


Ao instalar o SQL Server, são criados os seguintes bancos de dados do sistema:

Master - Controla os bancos de dados do usuário e a operação do SQL Server. Tem como
tamanho inicial 16 MB. É importante manter um backup atualizado desse banco de dados.
Contém informações sobre:
- Contas de login
- Processos em execução
- Mensagens de erro
- Bancos de dados criados no servidor
- Espaço alocado para cada banco de dados
- Travas [locks] de linha ativas
- Espaço alocado para cada banco de dados
- Procedimentos armazenados do sistema

Model - É um modelo usado para criação de novos bancos de dados, que pode ser usado para
definir padrões, como autorizações default de usuário, opções de configuração, tipos de dados
etc. Sempre que um banco de dados do usuário é criado, o conteúdo de model é copiado para
ele. Seu tamanho inicial é 2.5 MB. Esse modelo pode ser alterado.

Tempdb - Usado para armazenar tabelas temporárias e resultados intermediários de consultas.


Geralmente o seu conteúdo é excluído sempre que um usuário se desconecta. Ele cresce
automaticamente confome é necessário.

Msdb - Usado pelo serviço SQLServerAgent, para controlar tarefas como replicação,
agendamento de tarefas, backups e alertas. Contém algumas tabelas de sistema, que
armazenam informações usadas pelo SQLExecutive.

3
RESUMO APOSTILA SQL SERVER

Tabelas do Sistema
As tabelas do sistema, armazenadas no banco de dados master e em cada banco de dados de
usuário, contêm informações sobre o SQL Server e sobre cada banco de dados de usuário.
Existem 17 tabelas em cada banco de dados que formam o catálogo do banco de dados.
Todas começam com o prefixo sys e contém as seguintes informações:

Informação sobre cada coluna de cada tabela, e cada parâmetro de


syscolumns procedimento.

Para cada objeto de banco de dados (visão, regra, default, trigger,


syscomments procedimento) contém o texto de sua definição.

Inclui informações sobre todas as restrições usadas no banco de dados.


sysconstraints

Registra as dependências entre objetos do banco de dados.


sysdepends

Tem uma linha para cada grupo de arquivos armazenado em um banco de


sysfilegroups dados.

Informações sobre cada arquivo de um banco de dados.


sysfiles

Informações sobre todas as restrições de chaves estrangeiras encontradas


sysforeignkeys em todas as tabelas de um banco de dados.

Lista todos os catálogos de texto completo para esse banco de dados.


sysfulltextcatatalogs

Informação para cada índice criado e para cada tabela sem índices, além de
sysindexes informações para cada tabela que possui colunas text ou image.

Informação sobreas chaves e as colunas de um índice.


sysindexkeys

Informações sobre os membros de cada papel.


sysmembers

Informação sobre cada objeto do banco de dados (tabelas, visões,


sysobjects procedimentos, regras, defaults e gatilhos).

Permissões atribuídas à contas de segurança.


sysprotects

sysreferences Informação sobre toda restrição de integridade referencial usada numa

4
RESUMO APOSTILA SQL SERVER

coluna ou tabela de um banco de dados.

Informação sobre cada tipo de dados (do sistema ou definido pelo usuário).
systypes

Informação sobre cada usuário que pode ter acesso ao banco de dados.
sysusers

Existem também tabelas localizadas apenas no banco de dados master, que compõem o
catálogo do sistema. Elas contêm as seguintes informações:

Informações sobre cada unidade de alocação gerenciada pelo SQL


sysallocations Server

Informações sobre cada arquivo gerenciado pelo SQL Server


sysaltfiles

Informação sobre conjuntos de caracteres [character sets] e ordens de


syscharsets classificação [sort orders].

sysconfigures,
Parâmetros de configuração do SQL Server.
syscurconfigs
Informação sobre os bancos de dados existentes.
sysdatabases

Informação sobre os dispositivos, tais como o dispositivo de fita.


sysdevices
Idiomas suportados pelo servidor.
syslanguages
Travas (locks) ativas.
syslockinfo
Contas de login.
syslogins
Mensagens de erro do sistema
sysmessages
Contém uma linha para cada usuário e senha mapeados em um
sysoledbusers servidor.

Informação sobre os monitores de performance.


sysperfinfo
sysremotelogins Contas de login remotas.
Servidores remotos conhecidos.
sysservers
5
RESUMO APOSTILA SQL SERVER

Procedimentos Armazenados do Sistema


Um procedimento armazenado ou stored procedure é uma seqüência de comandos da
linguagem SQL, compilados e armazenados num banco de dados. Os procedimentos
armazenados do sistema [system stored procedures] são fornecidos pelo SQL Server,
armazenados no banco de dados master e automatizam várias tarefas comuns de
gerenciamento. Por exemplo, o procedimento sp_databases mostra quais os nomes de bancos
de dados existentes. Para executar esse procedimento, use o Query Analyzer (Iniciar |
Programas | Microsoft SQL Server 7.0 | Query Analyzer). Na página "Query" digite:

sp_databases e clique no botão Execute. Ele mostra um resultado como:

REMARKS
DATABASE_NAME DATABASE_SIZE
--------------------
------------------- ---------------
(null)
master 17408
(null)
model 1024
(null)
msdb 8192
(null)
pubs 3072
(null)
tempdb 2048
(5 row(s) affected)

Os procedimentos armazenados do sistema têm nomes no formato sp_xxx. Ao executar um


procedimento que tem a forma sp_xxx o procedimento será procurado no banco de dados
atual, se não for encontrado ele será procurado no banco de dados Master.

Quando um procedimento tem o formato xp_xxx ele é um procedimento estendido, quer dizer
que não foi escrito em SQL, mas foi compilado como parte de uma DLL. Por exemplo, o
procedimento xp_cmdshell executa um programa.

xp_cmdshell 'xxxxxx '

Onde: xxxxxx é o nome do programa que deseja executar.

Exemplo:

xp_cmdshell 'calc.exe'

Componentes do Banco de Dados


Um banco de dados é composto de objetos, índices, tipos de dados e restrições: Cada objeto
tem uma linha correspondente na tabela sysobjects.

6
RESUMO APOSTILA SQL SERVER

Objetos
Um objeto contém dados ou interage com os dados. Cada objeto tem uma linha
correspondente a tabela sysobjects.Existem os seguintes tipos de objetos:

Conjunto de linhas, compostas de colunas. Cada coluna


Tabela [table] armazena um item de dado.

Uma forma alternativa de visualizar dados em uma tabela ou


Visão [view] mais.

Um valor que é inserido numa coluna caso não tenha sido


Default informado um valor.

Valida os dados que podem ser inseridos em uma coluna.


Regra [rule]
Uma seqüência de comandos SQL, compilados e armazenados
Procedimento armazenado
no banco de dados.
[stored procedure]
Uma seqüência de comandos executados automaticamente
Gatilho [trigger] quando os dados são modificados numa tabela.

Índices
Um índice é composto de ponteiros para os dados, ordenados pelo valor de uma ou mais
colunas. Através de um índice, é possível acessar mais rapidamente os dados, dado o valor de
algumas colunas.

Tipos de dados
Um tipo de dados especifica quais os valores que podem ser armazenados em uma coluna.

Restrições [constraints]
Uma restrição reforça a integridade dos dados em uma tabela, ou entre duas tabelas,
controlando quais dados podem ser inseridos.

Estrutura dos bancos de dados


Todo banco de dados do SQL Server é constituído de dois ou mais arquivos físicos de sistema
operacional. Pode haver três tipos diferentes de arquivos físicos:

7
RESUMO APOSTILA SQL SERVER

Arquvios primários: Todo banco de dados inclui ao menos um arquivo primário, que é feito para
armazenar todos os objetos de banco de dados, tais como tabelas e índices. Este arquivo
também é usado para apontar para o resto dos arquivos que constituem o banco de dados.

Arquivo secundário: Um banco de dados só terá um arquivo secundário se o arqvuivo primário


não for grande o suficiente para aramzenar todos os dados. Um banco de dados pode ter um,
ou muitos arquivos secundários.

Arquivo de log: Todo banco de dados tem um arquivo de log, que é usado para rgistrar todas
informações antes que elas sejam escritas em um arquivo primário ou secundário. Esses dados
são utilizados para ajudar na recuperação, no caso de um problema com o banco de dados.
Um banco de dados pode ter um ou vários arquivos de log se o arquivo de log original ficar sem
espaço.

Nomes lógicos e físicos


Um dispositivo de banco de dados é um arquivo do sistema operacional, por exemplo, o banco
de dados MASTER é o arquivo C:\MSSQL7\DATA\master.mdf, localizado no servidor. Como
default, os bancos de dados são criados na pasta C:\MSSQL7\DATA, mas podem ser criados
em qualquer drive ou pasta.

Cada banco de dados tem um nome físico (o caminho e nome do arquivo) e um nome lógico
(nome usado dentro do SQL Server). Os dois não precisam estar relacionados. Por exemplo,
ao criar um banco de dados chamado VENDAS, o SQL Server, cria um arquivo chamado C:\
MSSQL7\DATA\ VENDAS.mdf

O nome físico pode ser qualquer nome suportado pelo sistema operacional. O nome lógico
pode ter até 30 caracteres.

Arquivos predefinidos
Ao instalar o SQL Server, são criados quatro bancos de dados, com os seguintes nomes
lógicos:

- Master: composto pelos arquivos master.mdf e mastlog.ldf (arquivo primário e de log)


- Msdb: composto pelos arquivos msdbdata.mdf e mastlog.ldf (arquivo primário e de log, que
por sinal é o mesmo arquivo de log do banco de dados master)
- Model: composto pelos arquivos model.mdf e modellog.ldf.
- TempDB: composto pelos arquivos tempdb.mdf e templog.ldf

8
RESUMO APOSTILA SQL SERVER

3 - Criando Bancos de Dados

Objetivos:

- Aprender a gerenciar bancos de dados, criando, alterando ou excluindo-os com o Enterprise


Manager ou com comandos SQL.

- Aprender a criar tabelas e alterar sua estrutura.

Gerenciando Bancos de Dados


Você cria um banco de dados definindo o nome, nome do arquivo, tamanho inicial, tamanho
máximo e taxa de crescimeno. Apenas o administrador do sistema (SA) pode criar, modificar o
tamanho e excluir os bancos de dados, mas ele pode conceder permissões a outros usuários
para isso

Depois de fazer fazer alterações no do banco de dados é recomendável fazer backup do banco
de dados master, porque ele contém informações sobre cada banco de dados. Mais
especificamente, a tabela de sistema sysdatabases, do banco de dados master, armazena as
informações sobre todos os bancos de dados.

O Log de Transações
Quando um banco de dados é criado, é criado também um log de transações para esse banco
de dados. Todas as alterações feitas no banco de dados são também registradas nesse log.
Quando é executado um comando que altera os dados (insere, altera ou exclui linhas numa
tabela), essa alteração é gravada primeiro no log de transações. Periodicamente, o SQL Server
faz um checkpoint, um processo que grava em disco as alterações feitas em memória.
Geralmente um checkpoint é feito a cada minuto.

O log de transações permite recuperar o banco de dados a um estado consistente, em caso de


uma pane no sistema. Sempre que o SQL Server inicia, ele verifica o log de transações para
saber se alguma alteração foi iniciada, mas não salva nos dados. As transações que não foram
confirmadas (commited) são canceladas.

9
RESUMO APOSTILA SQL SERVER

Ferramentas para criar bancos de dados

Um banco de dados pode ser criado usando uma das seguintes ferramentas:

- Criar bancos de dados usando o Enterprise Manager


- Criar bancos de dados usando escrevendo comandos SQL no Query Analyzer

Criando bancos de dados com comandos SQL

Como exemplo, vamos criar um banco de dados, entrando com o seguinte código SQL no
Query Analyzer.

Sintaxe:

CREATE DATABASE nome_bancodedados


[ON {
[PRIMARY] (NAME = nome_lógico_arquivo,
FILENAME = 'caminho_e_nome_arquivo'
[, SIZE = tamanho]
[, MAXSIZE = tamanho_máximo]
[, FILEGROWTH = taxa_crescimento]
}[,...n]
]

Onde:

nome_bancodedados é o nome do banco de dados que se deseja criar.

nome_logico_arquivo é um nome usado para referenciar o arquivo em quaisquer comandos


SQL executados depois que o banco de dados tiver sido criado.

PRIMARY: Esta opção especifica o grupo de arquivos primário. O grupo de arquivos primário
deve conter todas as tabelas de sistema para o banco de dados. Um banco de dados só pode
ter um grupo de arquivo PRIMARY. Se não for especificado algum, o primeiro listado será o
primário.

FILENAME: Aqui deve-se especificar o caminho e nome do arquivo que você está criando. O
arquivo deve estar localizado na mesma máquina que o servidor SQL Server. Ele pode estar
em uma unidade de disco diferente contanto que esteja na mesma máquina.

SIZE: Especifica o tamanho em megabytes que você quer alocar para o seu banco de dados.

10
RESUMO APOSTILA SQL SERVER

MAXSIZE: Esta opção lhe permite especificar o tamanho máximo até o qual seu arquivo pode
crescer. O padrão permite que seu arquivo cresça até que o disco esteja cheio.

FILEGROWTH: Especifica a taxa de crescimento do arquivo. Este ajuste não pode exceder a
configuração de MAXSIZE. Um valor de 0 indica que não é permitido crescimento. O padrão é
10 por cento, significando que a cada vez que o arquivo cresce, será alocado um espaço
adicional de 10 por cento para ele. Um banco de dados que esteja em mais de um arquivo
(veja Arquivos para maiores detalhes), só é expandido depois que o último arquivo estiver
cheio.

Alterando um banco de dados com comandos SQL


Para expandir o banco de dados, pode-se usar ALTER DATABASE. Para utilizar este
comando, deve-se estar posicionado no banco de dados master:
11
RESUMO APOSTILA SQL SERVER

Sintaxe:

ALTER DATABASE nome_bancodedados


MODIFY FILE
(NAME = nome_logico_arquivo,

SIZE = novo_tamanho
)

Por exemplo:

Vamos fazer o banco de dados aumentar para 12 Mb:

ALTER DATABASE Exemplo2


MODIFY FILE
(NAME = Exemplo2_data,
SIZE = 12MB
)

Para expandir o log de transações:

ALTER DATABASE Exemplo2


MODIFY FILE
(NAME = Exemplo2_log,
SIZE = 3MB
)

Com o comando SQL ALTER DATABASE, também é possível acrescentar arquivos ao banco
de dados. Para isso, usa-se a opção ADD FILE.

ALTER DATABASE Exemplo2


ADD FILE (NAME='Exemplo2_dados2',
FILENAME='C:\mssql7\data\Exemplo2.ndf',
SIZE=4MB,
MAXSIZE=7MB)

Excluindo um banco de dados com comandos SQL


Para excluir um banco de dados, usa-se:

Sintaxe

DROP DATABASE nome_bancodedados[, nome_bancodedados...]

Exemplos:

DROP DATABASE Exemplo, Exemplo2


DROP DATABASE exemplo3

12
RESUMO APOSTILA SQL SERVER

Criando Tabelas
Uma tabela é um objeto do banco de dados, composto de zero ou mais linhas, contendo os
dados, organizados em uma ou mais colunas. Para criar a tabela, você pode usar o Enterprise
Manager ou comandos SQL. Após criar uma tabela, você utiliza comandos SQL para inserir
novas linhas, alterar colunas das linhas existentes, excluir linhas e consultar dados.

Tipos de Dados
Cada coluna tem um tipo de dados, que determina que tipo de informação pode ser colocada
na coluna e quais as características desses dados. O tipo é determinado quando a tabela é
criada e não pode ser alterado posteriormente.

Os tipos de dados existentes são:

Para dados Tipo Tamanho


Caractere char(n), varchar(n), nvarchar(n), nchar(n) até n bytes
Numérico exato decimal(p,e) ou numeric(p,e) -depende-
Numérico aproximado float, real 8, 4 bytes
Numérico inteiro int, smallint, tinyint 4, 2, 1 byte
Monetário money, smallmoney 8, 4 bytes
Data e hora datetime, smalldatetime 8, 4 bytes
Binário binary(n), varbinary(n) n bytes
Texto e imagens text, image, ntext -variável-
Outros bit, timestamp 1 bit, 8 bytes

Para dados contendo caracteres, char(n) armazena um número fixo de caracteres. Por
exemplo, uma coluna do tipo char(30) tem sempre 30 caracteres. Se forem informados menos,
o restante é completado com espaços. Já o tipo varchar(n) armazena uma quantidade variável
de caracteres, até o máximo informado. Os tipos nchar(n) e nvarchar(n), armazenam dados
Unicode, de comprimento fixo ou variável, e usam o conjunto de caracteres UNICODE UCS-2.
Os tipos "numéricos exatos", decimal e numeric, permitem armazenar dados exatos, sem
perdas devidas a arredondamento. Ao usar esses tipos, você pode especificar uma precisão,
que indica quantos dígitos podem ser usados no total e uma escala, que indica quantos dígitos
podem ser usados à direita do ponto. Por exemplo, decimal(9,2) permite guardar 7 dígitos
antes do ponto decimal e 2 após, num total de 9, assim o maior valor possível é 9999999,99.
Os tipos "numéricos inexatos", float e real, armazenam dados numéricos, mas nem sempre
mantém a precisão suficiente para armazenar corretamente números de vários dígitos.
O tipo money é usado para valores monetários, ocupando 8 bytes em disco e permitindo
valores entre -922.337.203.685.477,5808 e +922.337.203.685.477,5807 (922 trilhões). O tipo
13
RESUMO APOSTILA SQL SERVER

smallmoney permite valores entre - 214.748,3648 e +214.748,3647 (214 mil) e ocupa 4 bytes
em disco.
Dos tipos inteiros, int usa 32 bits (4 bytes), permitindo armazenar até +/-2.147.483.647, smallint
usa 16 bits (2 bytes) permitindo +/-32767 e tinyint usa 8 bits (1 byte), permitindo números não-
negativos de 0 a 255.
O tipo datetime armazena valores contendo a data e hora, com precisão de 1/300 de segundo,
entre 1º de janeiro de 1753 e 31 de dezembro de 9999 (o século é sempre armazenado). O tipo
smalldatetime ocupa menos espaço e armazena datas e horas de 1º de janeiro de 1900 até 6
de junho de 2079, com precisão de 1 minuto.
Tipos binários são usados para dados que o SQL Server não interpreta, por exemplo, o
conteúdo de um arquivo binário. O tipo text é usado para colunas com dados "memo", ou seja,
com texto de tamanho variável; o tipo ntext armazena dados Unicode de tamanho variável. O
tipo image armazena imagens, também de tamanho variável.
Os tipos text e ntext, armazenam dados de tamanho variável, mas podem armazenar
1.073.741.823 caracteres, para o caso do ntext, e 2.146.483.647 caracteres para o caso do tipo
text. Enquanto isso, os tipos varchar e nvarchar armazenam "somente" 8000 caracteres
(varchar) ou 4000 caracteres (nvarchar)
O tipo bit armazena valor 1 ou 0. Uma coluna do tipo timestamp não pode ser alterada pelo
usuário. Ela é definida automaticamente com a data e hora atual quando a linha é inserida ou
atualizada.

Definindo novos tipos de dados


Você pode criar seus próprios tipos de dados, para facilitar a padronização, usando o
procedimento de sistema sp_addtype ou o Enterprise Manager.
Usando o procedimento de sistema sp_addtype:

Sintaxe

sp_addtype nome_tipo, tipo_dado [, valor_null]

Onde:

nome_tipo é o nome do tipo de dado que deseja criar.


tipo_dado é o tipo de informação que ira conter este tipo criado. Exemplo: char, int,..etc.
valor_null identifica se este tipo pode ou não conter valores nulos.

Exemplos:

sp_addtype cpf, 'char(11)'


sp_addtype nomepessoa, 'char(50)'
sp_addtype valorgrande, 'numeric(15,2)'
sp_addtype tipooperacao, 'SmallInt', NONULL

Com isso, usar o tipo 'cpf', por exemplo, é o mesmo que usar char(11), mas é mais intuitivo e
fácil de entender. Se você especificar NONULL no tipo significa que ele não aceita valores
nulos.
14
RESUMO APOSTILA SQL SERVER

Você pode excluir um tipo com sp_droptype:

Sintaxe:

sp_droptype nome_tipo

Onde:
nome_tipo é o nome do tipo de dados que deseja excluir.

Exemplo:

Para executar este exemplo continue posicionado no banco de dados Exemplo.

sp_droptype nomepessoa

Criando tabelas com comandos SQL


Uma tabela também pode ser criada com o comando CREATE TABLE

Exemplo:
CREATE TABLE Cliente1
(
CodCliente int NOT NULL,
Nome varchar(50),
CPF varchar(11) NULL,
DataCadastro datetime NOT NULL DEFAULT (getdate()),
Cidade varchar(20) NULL,
UF char(2) NULL,
País varchar(20) DEFAULT ('Brasil')
)

Excluindo uma tabela


Para excluir uma tabela pode-se usar o comando DROP TABLE.

Sintaxe:
DROP TABLE [[banco_dados.]Owner.]nome_tabela
[, [[banco_dados.]owner.]nome_tabela...]

Onde:

- banco_dados é o nome do banco de dados a que a tabela pertence. Essa opção será usada
quando se estiver posicionado num determinado banco de dados e se deseja excluir a tabela
de outro banco de dados.

- nome_tabela é o nome da tabela que se deseja remover.

15
RESUMO APOSTILA SQL SERVER

Exemplos:

Drop Table Cliente1


Drop Table Exemplo.dbo.cliente1

Alterando a estrutura das tabelas


Depois que uma tabela for criada, pode-se mudar várias das opções que foram definidas
quando a tabela foi originalmente criada, por exemplo:

- Colunas podem ser acrescentadas, modificadas ou excluídas.


- Restrições PRIMARY KEY e FOREIGN KEY podem ser acrescentadas ou excluídas.
- Restrições UNIQUE e CHECK e definições DEFAULT podem ser acrescentadas ou excluídas.

Alterando a tabela com comandos SQL


É possível alterar uma tabela com comandos SQL usando o comando ALTER TABLE.

Sintaxe:
ALTER TABLE [banco_dados.[owner.]]nome_tabela

{
[ALTER COLUMN nome_coluna
{novo_tipo_de_dados [(precisão[, escala])]
| ADD {nome_coluna dados_coluna
| [WITH CHECK | WITH NOCHECK]}

Onde:

banco_dados é o nome do banco de dados a que a tabela pertence. Essa opção é opcional, ela
será usada somente quando se estiver posicionado num determinado banco de dados se e
deseja excluir a tabela de outro banco de dados.

nome_tabela é o nome da tabela que deseja alterar.

nome_coluna é a coluna que se quer alterar.

novo_tipo_de_dados é o tipo de dados que a coluna aceitará a partir de agora.

Exemplos:

ALTER TABLE Cliente ADD ender varchar(50) NULL


ALTER TABLE Cliente ALTER COLUMN CIDADE VARCHAR (25)

Para renomear uma coluna, usa-se o procedimento sp_rename:

sp_rename 'Cliente.ender', Endereco

16
RESUMO APOSTILA SQL SERVER

4 - Consultando Dados Armazenados nas Tabelas

A Sintaxe do SELECT
O comando SELECT mostra dados de uma ou mais tabelas. A sua sintaxe simplificada tem a
seguinte forma:
SELECT lista_de_colunas
FROM lista_de_tabelas
WHERE condições

Onde

- A lista_de_colunas especifica quais colunas serão retornadas como resultado, separadas por
vírgulas ou um asterisco (*) que indica todas as colunas da tabela.
- A cláusula FROM, com uma lista_de_tabelas, especifica quais tabelas serão consultadas.
- A cláusula WHERE especifica condições que devem ser satisfeitas pelas linhas das tabelas.

Exemplo:
select * from authors

O resultado irá mostrar todas as colunas e todas as linhas da tabela 'authors' (ou seja, todo o
seu conteúdo), como abaixo (algumas linhas e colunas foram omitidas):

Usando Condições
Os comandos que já usamos não têm a cláusula WHERE. Nesse caso, todas as linhas da
tabela são retornadas. Se o WHERE estiver presente, ele especifica uma condição que
seleciona as linhas, e apenas as que satisfazem essa condição serão mostradas.

Por exemplo, se quisermos os autores que moram na Califórnia, podemos consultar as linhas
cuja coluna 'state' (estado) tem o valor 'CA':
select au_fname, au_lname, city, state
from authors
where state='CA'

O resultado será:

17
RESUMO APOSTILA SQL SERVER

Manipulando expressões
Um comando SELECT pode retornar nas colunas de resultado uma coluna da tabela, ou um
valor calculado. Por exemplo, a tabela titles contém os títulos de livro (title) e os preços de cada
um (price). Se quisermos ver como fica o preço de cada um após um aumento de 10%, pode
ser feito o seguinte:

select price Preço , (price * 1.1) "Preço com 10% de aumento", title from titles

Note que "Preço com 10% de aumento" é o nome do cabeçalho da expressão (price * 1.1),
como o nome colocado possui espaços, foi necessário coloca-lo entre aspas.

Funções matemáticas
Exemplo de funções matemáticas do SQL Server:

ABS(valor) retorna o valor absoluto (sem sinal) de um item.


POWER(valor,p) retorna o valor elevado à potência p.
ROUND(valor,n) arredonda o valor para n casas decimais.
SQRT (valor) retorna a raiz quadrada do valor especificado.
PI valor constante 3.141592563589793

Para outras funções, consulte o help do Transact-SQL em 'Math functions'.

Por exemplo:

Select price Preço , ROUND(price, 1) "Preço com 1 casa decimal", from titles

18
RESUMO APOSTILA SQL SERVER

Funções de caracteres
Você pode usar funções para manipular dados do tipo caracter (char ou varchar), por exemplo,
para pegar uma sub-string de uma seqüência de caracteres. E você pode usar o operador +
para concatenar dois valores de tipo caracter.

select au_fname + ' ' + au_lname 'Nome completo', city + ', ' + state 'Cidade' from
authors

O resultado será:

Condições de pesquisa
Como vimos, a cláusula WHERE permite selecionar quais as linhas da tabela a serem incluídas
no resultado. Existem várias formas de montar uma cláusula WHERE, usando um dos
seguintes elementos:

Operadores de comparação:
= igual a
> maior que
< menor que
>= ou !< maior ou igual (não menor)
<= ou !> menor ou igual (não maior)
<> ou != diferente

Faixas: BETWEEN valor-ini AND valorl-fin


Listas: IN (lista)
Casamento de padrões: LIKE padrão
Valores nulos: IS NULL, IS NOT NULL
Combinação de condições: AND, OR, NOT
19
RESUMO APOSTILA SQL SERVER

Usando operadores
As condições mais simples são formadas usando operadores de comparação, como vimos no
exemplo anterior:
select au_lname, city from authors where state = 'CA'

Se quisermos fazer o contrário, isto é, procurar os autores que NÃO são da Califórnia,
podemos fazer:
select au_lname, city from authors where state <> 'CA'

Note que diferente também pode ser representado por !=.

Usando faixas
Na tabela titles, para cada livro, está guardada a sua data de publicação na coluna 'pubdate'.

Se quisermos saber quais os livros publicados no ano de 1991, podemos fazer a consulta:

select pubdate, title from titles where pubdate between '1/1/91' and '12/31/91'

Onde BETWEEN...AND... seleciona os valores de 'pubdate' que estão dentro de uma


derminada faixa.
Para fazer o contrário, bastaria usar NOT BETWEEN

Usando listas
Pode-se selecionar valores de acordo com uma lista. Se o valor pertence à lista, a linha será
incluída no resultado. Por exemplo:
select au_lname, city, state from authors where state in ('UT','CA')

O resultado contém as linhas onde 'state' tem um dos valores 'UT' ou 'CA'. Equivale ao mesmo
que usar uma condição composta:
where state = 'UT' OR state = 'CA'

Juntando várias condições


Você pode fazer condições compostas com AND, OR ou NOT.
O operador AND (E) liga duas condições e retorna verdadeiro apenas se ambas são
verdadeiras e falso se pelo menos uma delas é falsa. Já OR (OU) retorna verdadeiro se pelo
menos uma delas for verdadeira e falso se ambas forem falsas. O operador NOT (NÃO) inverte
uma condição. Por exemplo:
select title, pub_id, price from titles where (title like 'T%' OR pub_id = '0877')
AND (price > $16.00)

20
RESUMO APOSTILA SQL SERVER

Isso retorna os livros onde ambas as condições 1 e 2 são verdadeiras:

1-Uma das seguintes é verdadeira


o título ('title') começa com T,
OU
o código da editora ('pub_id') é '0877'
E
2- o preço ('price') é maior que 16.00

Ordenando resultados
Para ver o resultado numa ordem particular, use a cláusula ORDER BY. Se estiver presente,
deve ser a última cláusula do comando SELECT. Por exemplo, para ver os livros em ordem de
preço:

select title, type, price from titles order by price

Pode-se indicar após o nome da coluna, se a ordem é ascendente ou descendente:

select title, type, price from titles order by type asc, price desc

select title, type, price from titles order by 2 asc, 3 desc

União de conjuntos
O comando SELECT retorna um conjunto de linhas, e permite também operações com a noção
matemática de conjuntos. Por exemplo, o resultado de dois comandos SELECT pode ser
combinados com o operador UNION. Os dois comandos podem até mesmo trazer dados de
tabelas diferentes, desde que com o mesmo número de colunas, e tipos de dados compatíveis
para cada coluna correspondente de um com o outro.
Por exemplo, no banco de dados pubs, a tabela authors contém informação sobre cada autor, o
que inclui a cidade e estado onde ele mora (colunas city e state). A tabela publishers contém
informação sobre as editoras e suas cidades e estados. Para sabermos o conjunto de todas as
cidades onde existem autores ou editoras, pode ser feita uma união dos dois conjuntos, com:

select city, state from authors union


select city, state from publishers

Note que na união de dois conjuntos, os elementos repetidos são eliminados, como quando se
usa o DISTINCT.
Se você quer ordenar de modo diferente os resultados da união, usando ORDER BY, essa
cláusula só pode aparecer no segundo comando SELECT, ou seja, no final dos comandos, por
exemplo:

select city, state from authors union


select city, state from publishers order by state

21
RESUMO APOSTILA SQL SERVER

5 - Alteração de Dados

Objetivos:
- Aprender a inserir , atualizar e excluir linhas.

Inserindo linhas
O comando INSERT insere linhas em uma tabela. A forma mais simples do comando INSERT
insere somente uma linha , dados os valores.
INSERT [INTO] nome_tabela (colunas) VALUES (valores)

Onde:
nome_tabela é o nome da tabela que deseja incluir os dados.
colunas é o nome das colunas da tabela que deseja acrescentar os dados.
valores é o conteúdo de cada coluna.

Exemplos:
insert into Funcionario values (1, 'Primeiro Funcionário', 2, 122, 234.23,
'01/01/1998', '01/01/1998', 'M')

insert into Funcionario (CodFuncionario, Nome, CodDepartamento, Sexo, Salario,


DataAdmissao) values (2, 'Segundo Funcionário', 1, 'F', 4360.00, '01/01/1996')

insert into Funcionario (CodFuncionario, Nome, CodDepartamento, Sexo, Salario,


DataAdmissao, Ramal)
values (3, 'Terceiro Funcionário', 1, 'F', 1500.00, '12/30/1995', 122)

insert into Funcionario (CodFuncionario, Nome, CodDepartamento, Sexo,Salario,


DataAdmissao)
values (4, 'Quarto Funcionário', 1, 'M', 1500.34, '10/30/1996')

insert into Funcionario (CodFuncionario, Nome, CodDepartamento, Sexo, Salario,


DataAdmissao)
values (5, 'Quinto Funcionário', 3, 'M', 500.34, '07/30/1997')

insert into Funcionario (CodFuncionario, Nome, CodDepartamento, Sexo, Salario,


DataAdmissao)
values (6, 'Sexto Funcionário', 3, 'F', 1000.34, '08/30/1995')

insert into Funcionario (CodFuncionario, Nome, CodDepartamento, Sexo, Salario,


DataAdmissao)
values (7, 'Sétimo Funcionário', 3, 'F', 900.34, '01/01/1997')

Usando INSERT com SELECT


Você também pode inserir o resultado de uma consulta SELECT dentro de uma tabela

22
RESUMO APOSTILA SQL SERVER

insert into Cliente select CodCliente, Nome from Cliente where CodCliente in (2,4)

Excluindo linhas
O comando DELETE exclui permanentemente uma ou mais linhas de uma tabela, baseado em
alguma condição.
DELETE FROM nome_tabela WHERE condição

Onde:
nome_tabela é o nome da tabela que deseja excluir os dados.
condicao é condição para selecionar as dados que deseja excluir.

Exemplo:

delete from CopiaCliente where Codigo = 2

Usando sub-consultas
Assim como UPDATE, o comando DELETE também pode usar sub-consultas para excluir
linhas baseado nos dados de outra tabela.

insert into CopiaCliente select CodCliente, Nome from Cliente


insert into Cliente (5, 'Cliente Cinco')
insert into Cliente (6, 'Cliente Seis')

delete from Cliente where Codigo in (select CodCliente from Cliente)

Limpando uma tabela


Para excluir todas as linhas de uma tabela, existem duas opções. Uma é usar um comando
DELETE sem condição WHERE:

delete from CopiaCliente

Outra opção é o comando TRUNCATE TABLE, que quase sempre é mais rápido que o
DELETE, especialmente em tabelas grandes:

truncate table CopiaCliente

Junções de tabelas
Um comando SELECT também pode fazer uma consulta que traz dados de duas ou mais
tabelas. Esse é um processo chamado de junção [join]. As tabelas têm uma coluna em comum
que é usado para fazer as junções.

23
RESUMO APOSTILA SQL SERVER

Sintaxe da Junção
O SQL Server aceita duas sintaxes diferentes para junção de tabelas. Uma delas, mostrada
acima, é específica ao SQL Server e, às vezes, um pouco mais simples de utilizar.
Na sintaxe do SQL Server, na lista do FROM as duas (ou mais) tabelas são especificadas,
separadas por vírgulas. Na cláusula WHERE deve haver uma condição ligando as duas, a
condição de junção [join condition]. Na lista de colunas do SELECT podem ser incluídos
colunas de qualquer uma das tabelas.

A outra forma de sintaxe que pode ser usada é a sintaxe do padrão ANSI SQL.

Exemplo:

select departamento.nome, funcionario.nome from funcionario


inner join departamento on funcionario.coddepartamento = departamento.coddepartamento

A condição de junção é especificada com a palavra ON.

Testes de existência
Um teste de existência é uma condição que envolve a palavra EXISTS e uma sub-consulta. A
condição é verdadeira se a sub-consulta retorna alguma linha e é falsa se ela retorna zero
linhas. Por exemplo, para saber quais os departamentos que possue funcionários cujo cargo é
igual a cargo1, utilize o banco de dados Exemplos e execute o seguinte comando:
select d.nome from departamento d where exists
(select * from funcionario f, cargo c
where f.codcargo = c.codcargo
and c.nome = 'Cargo1'
and d.coddepartamento = f.coddepartamento)

24
RESUMO APOSTILA SQL SERVER

6 - Implementando Índices

Objetivos:
- Aprender a criar índices;
- Entender o funcionamento do otimizador de consultas.

Por que índices?


Índice é um mecanismo que acelera bastante o acesso aos dados. Consiste de uma estrutura
de dados que contém ponteiros ordenados para os dados. O SQL Server usa índices ou
automaticamente em várias situações para acelerar a pesquisa e atualização de dados.

Recomenda-se considerar o seguinte para a criação de índices:

- Se uma coluna está presente na cláusula WHERE em um comando SELECT, UPDATE ou


DELETE, o SQL Server consegue verificar as condições mais rapidamente se houver um
índice. Caso contrário, ele faz uma varredura seqüencial da tabela.
- Se uma coluna é muito usada para ordenar valores (com ORDER BY), essa ordenação é
muito mais eficiente se ela tiver um índice.
- Se uma coluna é usada para fazer junção de duas tabelas, essas junções podem ser feitas
mais eficientemente se ela estiver indexada.

Índices não apenas aceleram a recuperação de linhas em consultas, mas eles também
aumentam a velocidade de atualizações e exclusões. Isso ocorre porque o SQL Server deve
encontrar uma linha, antes de poder atualizá-la ou excluí-la. No entanto, índices levam tempo
para serem criados e ocupam espaço em disco. Cada atualização na tabela também atualiza
dinamicamente todos os índices definidos. Portanto, se você criar muitos índices inúteis numa
tabela, pode estar atrapalhando o desempenho da atualização de dados sem agilizar muito o
tempo de resposta nas consultas.
No geral, o aumento da eficiência obtido com o uso de índices para localizar a linha sobrepuja
a carga extra de trabalho necessária para atualizar os índices, a não ser, como mencionado
acima, que a tabela tenha muitos índices.

Características dos Índices


Único
Um índice único [unique] é aquele onde os valores da chave não podem ser repetidos, ou seja,
os valores das colunas do índice, tomados em conjunto, não podem se repetir. Por exemplo, na
tabela Cliente, poderia ser criado um índice único para a coluna CodCliente, significando que
não pode haver valores duplicados nessa coluna. Se você tenta inserir dados em uma tabela
com valores repetidos para CodCliente, a inserção falha.

25
RESUMO APOSTILA SQL SERVER

Quando da criação de um índice único, não pode haver valores duplicados nas colunas do
índice. Se houver, a criação do índice falha e você deve alterar as colunas antes de tentar criá-
lo novamente.

Composto
Um índice composto é aquele formado por duas ou mais colunas. Esse tipo de índice é útil
quando duas ou mais colunas são sempre pesquisadas em conjunto. Por exemplo, poderia ser
criado um índice na tabela Cliente para as colunas (Cidade,Estado). A ordem das colunas
importa: um índice com (Estado,Cidade) seria completamente diferente.

Criando e excluindo índices com comandos SQL


É possível criar um índice com o comando SQL CREATE INDEX e excluir um índice com
DROP INDEX.

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]


INDEX nome_indice ON tabela (nome_coluna1 [, nome_coluna2, ...n])
[WITH
[PAD_INDEX]
[[,] FILLFACTOR = fator_preenchimento]
[[,] IGNORE_DUP_KEY]
[[,] DROP_EXISTING]
[[,] STATISTICS_NORECOMPUTE]
]
[ON grupo_arquivos]

Onde:
nome_indice é o nome do índice que deseja criar.
nome_tabela é o nome da tabela que deseja criar o índice.
nome_coluna1 é o nome da coluna que irá fazer parte do índice.Se o índice tiver mais de uma
coluna acrescente a vírgula e coloque o nome das outras colunas.
UNIQUE indica se o índice será único. É opcional. Se o índice fo único você pode acrescentar
a opção IGNORE_DUP_KEY [ignorar chaves duplicadas].
CLUSTERED indica se o índice será agrupado. Com o índice agrupado e a opção UNIQUE,
você pode também usar a opção IGNORE_DUP_KEY,
FILLFACTOR é o fator de prenchimento, ou seja, a porcentagem de espaço livre que será
deixado em cada página do índice.
DROP_EXISTING exclui o índice existente com o mesmo nome. Se você for criar um índice
cujo nome não existe e usar esta oção, o SQL Server retornará uma mensagem avisando que
o índice com o nome sendo criado não foi encontrado.
STATISTICS_NORECOMPUTE faz com que as estatísticas do índice não sejam recalculadas
automaticamente com a atualização do índice.
PAD_INDEX deixa espaços vazios nas páginas dos níveis intermediários do índice. Só faz
sentido se usado em conjunto com FILLFACTOR.

Para excluir algum índice, use o comando DROP INDEX, com a seguinte sintaxe:

26
RESUMO APOSTILA SQL SERVER

DROP INDEX 'tabela.índice' [,...n]

Onde tabela.indice é o nome da tabela, seguido do nome do índice que se deseja excluir.

Otimizando Consultas
O otimizador escolhe uma de duas alternativas ao fazer uma consulta: ou varre a tabela ou usa um índice.
Ele decide o que fazer baseado em:
- Estimativa aproximada de quanto trabalho é necessário para usar o índice ou não. Essa
estimativa é baseada em informações estatísticas sobre o índice, que dizem qual a distribuição
dos dados. Essas informações podem ficar desatualizadas. Para corrigi-las, execute o
comando UPDATE STATISTICS nome_da_tabela.
- Se uma tabela é muito pequena, ou se o otimizador espera que será retornada uma grande
porcentagem de linhas, ele faz uma varredura.
- Se na cláusula WHERE da consulta estão presentes colunas indexadas, é bem provável que
o otimizador resolva utilizar o índice.

7 - Integridade de Dados
27
RESUMO APOSTILA SQL SERVER

Objetivos:

- Aprender a criar colunas com auto-incremento;


- Aprender a utilizar as opções defaults e Regras nas colunas;
- Aprender a definir restrições nas tabelas para garantir a integridade dos dados;
- Saber quando escolher cada um dos recursos de integridade de dados.

A propriedade IDENTITY
Uma coluna criada com a propriedade IDENTITY tem um valor único que é gerado
automaticamente pelo sistema. Somente uma coluna pode ter essa propriedade. Por exemplo,
crie uma nova tabela no banco de dados Exemplo, com o seguinte comando:

create table Produto


(CodProduto int NOT NULL IDENTITY,
Nome varchar(60),
Preço money)

Uma coluna IDENTITY não aceita um valor explicitamente inserido. Ao inserir dados na tabela,
a coluna deve ser omitida. Execute agora:

insert into Produto (Nome, Preço) values ('Primeiro Produto', 100.0)


insert into Produto (Nome, Preço) values ('Segundo Produto', 150.0)
insert into Produto (Nome, Preço) values ('Terceiro Produto', 120.0)

select * from Produto

Note que a coluna CodProduto foi preenchida automaticamente com um valor auto-
incrementado pelo sistema:

CodProduto Nome Preço


----------- ------------------- --------------------------
1 Primeiro Produto 100,00
2 Segundo Produto 150,00
3 Terceiro Produto 120,00
(3 row(s) affected)

Desabilitando IDENTITY
Você pode temporariamente desativar a propriedade IDENTITY, para que você possa inserir
valores explicitamente numa coluna com IDENTITY. Pode ser necessário que você insira
valores explicitamente em tabelas que têm itens deletados com frequência. Inserir valores
explicitamente na coluna com IDENTITY lhe permite preencher espaços vazios deixados na
tabela.
Para desativar a geração automática de valores, use:

set identity_insert nome_da_tabela on

28
RESUMO APOSTILA SQL SERVER

Para voltar ao funcionamento normal, use:

set identity_insert nome_da_tabela off

A qualquer instante, somente uma tabela em uma sessão pode ter a propriedadede de
IDENTITY_INSERT em ON. Esta propriedade só é válida para o usuário atual e a sessão atual
(perde o efeito quando você se desconecta do SQL Server).
Se já houver uma tabela com esta propriedade em ON, e se entrar com o comando SET
IDENTITY_INSERT ON para outra tabela, será retornado uma mensagem de erro dizendo que
essa propriedade já está em ON e qual a tabela para a qual essa propriedade está em ON.

Definindo e usando restrições [constraints]


Uma restrição [constraint] é uma propriedade de uma coluna usada para reforçar a integridade
de dados. Geralmente restrições são definidas quando a tabela é criada (com CREATE
TABLE), mas podem também ser definidas ou retiradas quando a tabela já contém dados (com
o comando ALTER TABLE). Se um comando de alteração (INSERT ou UPDATE) não satisfaz
uma das restrições, o comando é cancelado.
Toda restrição tem um nome, que você pode informar nos comandos CREATE TABLE e
ALTER TABLE. Se você não informar um nome, o SQL gera um automaticamente, como
PK_titleauth_au_id_154Af3e0.

De forma geral, a sintaxe para uma restrição é:

CONSTRAINT nome_da_restrição definição

Onde a definição inicia com as palavras PRIMARY KEY, UNIQUE, CHECK, FOREIGN KEY ou
DEFAULT. A palavra CONSTRAINT e o nome_da_restrição podem ser omitidos. Nesse caso, o
nome será gerado automaticamente.

Chave primária [PRIMARY KEY]


A chave primária [primary key] de uma tabela é uma coluna ou seqüência de colunas que
identificam unicamente uma linha dentro da tabela, ou seja, seu valor não pode ser repetido
para outras linhas. Ao definir uma chave primária, automaticamente é criado um índice na
tabela. Só pode haver uma chave primária na tabela. Não se pode entrar com um valor nulo em
qualquer coluna de uma chave primária.

Na criação da tabela, essa restrição pode ser definida da seguinte forma :

create table Fornecedor (


CodFornecedor int not null primary key,
Nome varchar(50) null,
Endereco varchar(50) null,
Telefone varchar(20) null
)

29
RESUMO APOSTILA SQL SERVER

Na tabela Fornecedor, não pode haver duas linhas com o mesmo valor de 'CodFornecedor'.

Quando a chave é composta de duas ou mais colunas, nesse caso ela tem que ser
especificada com a lista de colunas entre parênteses, por exemplo:

create table ProdutoFornecedor


(CodProduto int,
CodFornecedor int
primary key (CodProduto, CodFornecedor))

Uma chave primária pode ser acrescentada à tabela depois que ela já foi criada, com o
comando ALTER TABLE. Por exemplo, vamos acrescentar chaves primárias às tabelas Cliente
e Produto:

alter table Cliente add primary key nonclustered (CodCliente)


alter table Produto add primary key clustered (CodProduto)

Verificação [CHECK]
Uma restrição CHECK é muito semelhante a uma regra, que verifica os valores que estão
sendo inseridos. A vantagem é que ele pode fazer referência a uma ou mais colunas da tabela.
Por exemplo, vamos verificar, na tabela Cliente, se a Cidade e Estado são informados. Vamos
criar uma restrição que impede de inserir o valor de Cidade, se Estado não foi informado:

alter table Cliente add check (not (Cidade is not null and Estado is null))

Chave estrangeira [FOREIGN KEY]


Uma forma importante de integridade no banco de dados é a integridade referencial, que é a
verificação de integridade feita entre duas tabelas. Por exemplo, a tabela 'ProdutoFornecedor'
será usada para relacionar dados de produtos e fornecedores. Ela contém as colunas
CodProduto e CodFornecedor. A primeira deve conter um código válido que exista na tabela
'Produto'. A outra deve ter um código válido existente na tabela 'Fornecedor'. Como validar
essa verificação?
Uma chave estrangeira [foreign key] é uma restrição de integridade referencial. Ela consiste de
uma coluna ou grupo de colunas cujo valor deve coincidir com valores de outra tabela. No
nosso caso, vamos adicionar duas chaves estrangeiras na tabela 'ProdutoFornecedor':
CodProduto faz referência a Produto.CodProduto e CodFornecedor faz referência a
Fornecedor.CodFornecedor:

alter table ProdutoFornecedor


add foreign key (CodProduto) references Produto(CodProduto),
foreign key (CodFornecedor) references Fornecedor(CodFornecedor)

Note que a chave primária de Produto é (CodProduto) e de Fornecedor é (CodFornecedor),


como foi definido antes. Se fossem especificados apenas os nomes das tabelas, sem indicar
entre parênteses as colunas, também funcionaria:
30
RESUMO APOSTILA SQL SERVER

alter table ProdutoFornecedor


add foreign key (CodProduto) references Produto,
foreign key (CodFornecedor) references Fornecedor

Porque nesse caso é assumida a chave primária. Mas uma chave estrangeira pode fazer
referência a colunas que não a chave primária, desde que possuam uma restrição UNIQUE
definida.

Outra forma de criar essas restrições é em conjunto com a tabela, da forma:

create table ProdutoFornecedor


(CodProduto int foreign key references Produto,
CodFornecedor int foreign key references Fornecedor,
primary key (CodProduto, CodFornecedor))

Esse tipo de restrição não cria um índice automaticamente, embora muitas vezes seja
recomendável criar para maior desempenho (geralmente não-clustered). Pode-se especificar o
nome da restrição opcionalmente, na forma CONSTRAINT nome, logo antes das palavras
"FOREIGN KEY".
Gerenciando restrições com comandos SQL
Como já vimos, CREATE TABLE pode criar as restrições junto com a tabela e ALTER TABLE,
com a cláusula ADD, permite adicionar restrições depois que a tabela foi criada. Para excluir
uma restrição, é preciso saber o seu nome. Se você não informou o nome na criação, terá que
descobri-lo, o que pode ser feito usando-se:

sp_help nome_da_tabela

Esse comando mostra informações sobre a tabela, inclusive os nomes de cada restrição. Para
excluir uma restrição, usa-se ALTER TABLE, com a opção DROP (independente do tipo de
restrição). A sintaxe genérica é:

alter table nome_da_tabela


drop constraint nome_da_restrição

Uma restrição também pode ser desabilitada temporariamente e depois reabilitada com o
comando ALTER TABLE, usando as opções NOCHECK (para desabilitar) e CHECK (para
habilitar). Isso não funciona com PRIMARY KEY, UNIQUE ou DEFAULT, apenas com as
outras restrições. Isso pode ser útil para inserir dados que fujam aos valores impostos pelas
restrições. A sintaxe é:

alter table nome_da_tabela nocheck constraint nome_da_restrição


alter table nome_da_tabela check constraint nome_da_restrição

31
RESUMO APOSTILA SQL SERVER

8 - Visões, Gatilhos e Procedimentos

Objetivos:
- Aprender a criar e utilizar visões e saber quais as particularidades do acesso a visões;
- Aprender a criar e utilizar procedimentos armazenados;
- Aprender a criar e utilizar triggers[gatilhos].

Visões [Views]
Uma visão [view] é uma forma alternativa de olhar os dados contidos em uma ou mais tabelas.
Para definir uma visão, usa-se um comando SELECT que faz uma consulta sobre as tabelas. A
visão aparece depois como se fosse uma tabela.
Visões têm as seguintes vantagens:

-Uma visão pode restringir quais as colunas da tabela que podem ser acessadas (para leitura
ou para modificação), o que é útil no caso de controle de acesso, como veremos mais tarde.
-Uma consulta SELECT que é usada muito freqüentemente pode ser criada como visão. Com
isso, a cada vez que ela é necessária, basta selecionar dados da visão.
-Visões podem conter valores calculados ou valores de resumo, o que simplifica a operação.
-Uma visão pode ser usada para exportar dados para outras aplicações.
Criando uma visão com comandos SQL
Para criar uma visão através de SQL, use o comando CREATE VIEW. Esse comando tem a
seguinte sintaxe:

CREATE VIEW nome_visão [(coluna [,...n])]


[WITH ENCRYPTION]
AS
declaração_SELECT
[WITH CHECK OPTION]

nome_visão é o nome a ser dados à visão


coluna é o nome a ser usado para uma coluna em uma visão. Nomear uma coluna em
CREATE VIEW só é necessário quando uma coluna é obtida por uma expressão aritmética,
uma função, ou uma constante, ou quando duas ou mais colunas poderiam ter o mesmo nome
(frequentemente por causa de uma junção), ou quando a coluna em uma visão recene um
nome diferente do nome da coluna da qual se originou. Os nomes de colunas também podem
ser atribuídos no comando SELECT. Caso você queira nomear mais de uma coluna, entre com
o nome de cada uma separado por vírgulas.
WITH ENCRYPTION criptografa as entradas na tabela syscomments que contém o texto do
comando CREATE VIEW.
WITH CHECK OPTION força todas as modificações de dados executadas na visão a aderirem
aos critérios definidos na declaração_SELECT. Quando uma coluna é modificada através de

32
RESUMO APOSTILA SQL SERVER

uma visão, WITH CHECK OPTION garante que os dados permaneçam visíveis através da
visão depois que as modificações forem efetivadas.

Vamos criar uma visão no banco de dados Exemplo, usando as tabelas 'Produto', 'Fornecedor'
e 'ProdutoFornecedor'. Essa visão vai mostrar o nome do fornecedor e o nome do produto.
Crie-a digitando o texto abaixo no Query Analyzer:

create view VisaoFornecProduto as


select f.Nome NomeFornecedor, p.Nome NomeProduto
from Fornecedor f
inner join ProdutoFornecedor pf
on f.CodFornecedor = pf.CodFornecedor
inner join Produto p
on pf.CodProduto = p.CodProduto

select * from VisaoFornecProduto

O resultado terá as colunas 'NomeFornecedor' e 'NomeProduto', mostrando os dados


relacionados entre elas.

Alterando ou excluindo uma visão


O comando SQL ALTER VIEW tem a seguinte sintaxe:

ALTER VIEW nome_visão [(coluna [,...n])]


[WITH ENCRYPTION]
AS declaração_select
[WITH CHECK OPTION]

Todas as considerações feitas a respeito do comando CREATE VIEW se aplicam aqui. Caso
você não se lembre do comando usado na criação da visão (o comando CREATE VIEW) , você
pode obtê-lo usando o procedimento sp_helptext, da forma:

sp_helptext VisaoFornecProduto

Modificando dados através de uma visão


Você pode executar um comando UPDATE em uma visão. Se ela foi baseada em uma única
tabela, isso não provoca grandes problemas. Se a opção WITH CHECK OPTION acima for
usada, as atualizações devem satisfazer as condições da cláusula WHERE usada na criação
da visão. Inserções com INSERT também podem ser feitas.
Se a visão é baseada em duas ou mais tabelas, a atualização só é possível se o comando
altera dados de apenas uma tabela. Colunas calculadas não podem ser alteradas. Se foram
usadas funções de agregação, também não é possível modificar os dados através da visão.
Na inserção, se uma coluna de uma tabela subjacente não permite nulos (NOT NULL), não é
possível inserir linhas na visão, pois isso deixaria a coluna sem valor.

33
RESUMO APOSTILA SQL SERVER

Procedimentos Armazenados
Um procedimento armazenado [stored procedures] é um conjunto de comandos SQL que são
compilados e armazenados no servidor. Ele pode ser chamado a partir de um comando SQL
qualquer.
A vantagem de usar procedimentos armazenados é que eles podem encapsular rotinas de uso
freqüente no próprio servidor, e estarão disponíveis para todas as aplicações. Parte da lógica
do sistema pode ser armazenada no próprio banco de dados, em vez de ser codificada várias
vezes em cada aplicação.

Criando procedimentos armazenados


Para criar um procedimento, use o comando CREATE PROCEDURE. Por exemplo, o
procedimento abaixo recebe um parâmetro (@nome) e mostra todos os clientes cujo nome
contenha o nome informado:

create procedure BuscaCliente


@nomeBusca varchar(50)
as
select CodCliente, Nome from Cliente
where Nome like '%' + @nomeBusca + '%'

Note que os parâmetros são sempre declarados com @, logo após o nome do procedimento.
Um procedimento pode ter zero ou mais parâmetros. Declara-se o nome do procedimento, e a
seguir o tipo de dados do parâmetro.

Dentro do procedimento pode haver vários comandos SELECT e o resultado desses comandos
será o resultado do procedimento. O corpo do procedimento começa com a palavra AS e vai
até o final do procedimento.
Executando procedimentos armazenados
Para executar um procedimento, usa-se o comando EXEC (ou EXECUTE). A palavra "EXEC"
pode ser omitida:
BuscaCliente 'an'

Ao executar um procedimento, você pode informar explicitamente o nome de cada parâmetro:

BuscaCliente @nomeBusca = 'an'

Comandos para uso em procedimentos armazenados


Você pode declarar uma variável em um procedimento e usá-la para guardar valores. Por
exemplo, exclua o procedimento anterior e crie-o novamente como abaixo:

drop procedure BuscaCliente


go
create procedure BuscaCliente
@nomeBusca varchar(50)
34
RESUMO APOSTILA SQL SERVER

as
declare @contagem int, @mensagem char(100)
select CodCliente, Nome from Cliente
where Nome like '%' + @nomeBusca + '%'
-- conta quantas linhas foram encontradas
select @contagem = count(*) from Cliente
where Nome like '%' + @nomeBusca + '%'

if @contagem = 0
begin
select @mensagem = 'Nenhum cliente contém
"'+@nomeBusca+'"'
print @mensagem
print ""
end

O comando DECLARE declara variáveis, que são sempre introduzidas pelo caractere @. No
caso, @contagem é uma variável do tipo int e @mensagem do tipo char(100).
Note que quando você usa um comando SELECT, o resultado pode ser colocado numa
variável, como @contagem acima. Esse resultado não aparece no resultado do SELECT. Essa
é também a única forma de alterar uma variável (você não pode escrever '@variável = valor'
diretamente).
O comando IF verifica uma condição e executa um comando caso a condição seja verdadeira.
Se acompanhado da cláusula ELSE, executa um outro comando caso a condição seja falsa. O
comando PRINT usado acima é geralmente usado para mostrar mensagens, que aparecem
quando você chama o procedimento interativamente.
Os comandos BEGIN e END são usados para delimitar uma lista de comandos, que passa a
ser tratada como um comando único. No caso acima, eles são necessários para poder executar
três comandos dentro do IF (o SELECT e os dois PRINT).

Gatilhos [Triggers]
Um gatilho [trigger] é um tipo de procedimento armazenado, que é executado automaticamente
quando ocorre algum tipo de alteração numa tabela. Gatilhos "disparam" quando ocorre uma
operação INSERT, UPDATE ou DELETE numa tabela.
Geralmente gatilhos são usados para reforçar restrições de integridade que não podem ser
tratadas pelos recursos mais simples, como regras, defaults, restrições, a opção NOT NULL
etc. Deve-se usar defaults e restrições quando eles fornecem toda a funcionalidade necessária.
Um gatilho também pode ser usado para calcular e armazenar valores automaticamente em
outra tabela.
Exemplo de gatilhos
create table NotaFiscal
(NumeroNota numeric(10) primary key,
ValorTotal numeric(10,2) default (0) )

create table ItemNotaFiscal


(NumeroNota numeric(10) foreign key references NotaFiscal,
CodProduto int foreign key references Produto,
Quantidade int not null check (Quantidade > 0),

35
RESUMO APOSTILA SQL SERVER

primary key (NumeroNota,CodProduto)


)

Vamos usar gatilhos para duas finalidades: primeiro, quando for excluída uma nota fiscal, todos
os seus itens serão excluídos automaticamente. Depois, quando for incluído um item, a coluna
'ValorTotal' será atualizada, na tabela 'NotaFiscal'.
Criando gatilhos
Gatilhos são sempre criados vinculados a uma determinada tabela. Se a tabela for excluída,
todos os gatilhos dela são excluídos como conseqüência. Ao criar um gatilho, você pode
especificar qual(is) a(s) operação(ões) em que ele será acionado: INSERT, UPDATE ou
DELETE.
Gatilhos para inserção
Quando é feita a inclusão de uma ou mais linhas na tabela, o SQL Server cria uma tabela
virtual chamada inserted, que contém as linhas que serão incluídas (mas ainda não foram).
Essa tabela tem a mesma estrutura da tabela principal. Você pode consultar dados nessa
tabela com o SELECT, da mesma forma que uma tabela real.
Vamos criar um gatilho, chamado InclusaoItemNota, que será ativado por uma operação
INSERT na tabela ItemNotaFiscal.

create trigger InclusaoItemNota


on ItemNotaFiscal for insert
as
if not exists (select * from
inserted, NotaFiscal
where inserted.NumeroNota =
NotaFiscal.NumeroNota)
raiserror('Esse item não contém um número de nota válido')
update NotaFiscal
set ValorTotal = ValorTotal
+ (select i.Quantidade * p.Preço
from Produto p, inserted i
where p.CodProduto = i.CodProduto)
where NumeroNota = (select NumeroNota from inserted)

Gatilhos para exclusão


Na exclusão, as linhas da tabela são removidas e colocadas na tabela virtual deleted, que tem
a mesma estrutura da tabela principal. Um gatilho para exclusão pode consultar deleted para
saber quais as linhas excluídas.
Vamos criar um gatilho, na tabela NotaFiscal para, quando a nota fiscal for excluída, todos os
seus itens de nota relacionados, na tabela ItemNotaFiscal, sejam excluídos em cascata.

create trigger ExclusaoNota


on NotaFiscal for delete
as
-- excluir todos os itens relacionados
-- (mesmo NumeroNota que deleted)
delete from ItemNotaFiscal
where NumeroNota in (select NumeroNota from deleted)
36
RESUMO APOSTILA SQL SERVER

Gatilhos para atualização

create trigger AlteracaoItemNota


on ItemNotaFiscal for update
as
if update(Quantidade) or update(CodProduto)
begin
update NotaFiscal
set ValorTotal = ValorTotal +
(select p.Preço * (i.Quantidade - d.Quantidade)
from Produto p inner join inserted i
on p.CodProduto = i.CodProduto inner join deleted d
on i.CodProduto = d.CodProduto and i.NumeroNota = d.NumeroNota)
end

Criando gatilhos para múltiplas ações


Um gatilho pode ser criado para uma tabela para múltiplas operações nessa tabela. Por
exemplo, para criar um gatilho usado em INSERT, UPDATE e DELETE, usa-se uma sintaxe,
como:
create trigger nome_do_gatilho
on nome_da_tabela for INSERT, UPDATE, DELETE
as
texto_do_gatilho

37
RESUMO APOSTILA SQL SERVER

9 - Segurança

Objetivos:
- Conhecer os recursos do SQL Server para controle de acesso ao banco de dados;
- Aprender a criar logins de usuário e usuários do banco de dados.

Conceitos
Os recursos de segurança do SQL Server permitem determinar:
- Quais usuários podem usar o SQL Server.
- Quais usuários podem acessar cada banco de dados.
- As permissões de acesso para cada objeto de banco de dados e para cada usuário.
- As permissões de acesso para cada comando SQL em cada banco de dados, para cada
usuário.

Existem quatro barreiras para que os usuários possam acessar dados em um servidor SQL
Server:
- O sistema operacional de rede; o usuário deve efetuar logon na rede.
- A autenticação do SQL Server; o usuário deve ter uma conta no SQL Server.
- A autenticação de banco de dados; o ID do usuário deve existir em uma tabela de sistema do
banco de dados (mais especificamente, a tabela sysusers)
- A autenticação de objetos; o usuário deve ter permissões para acessar qualquer objeto
(tabelas, visões, entre outros).
Autenticação de usuários
Quando um usuário tenta acessar um servidor SQL Server, ele pode ser autenticado de duas
maneiras: pela Autenticação do Windows NT ou pela Autenticação do SQL Server. Não
confunda isso com modo de segurança, que é um tópico muito semelhante.
A autenticação do Windows NT se aproveita da segurança embutida no Windows NT Server, a
qual inclui características como senhas criptografadas, senhas que expiram, tamanho mínimo
de senhas, bloqueio de conta, e restrição de acesso com base em nomes de computador.
O SQL Server pode confiar no Windows NT para autenticar logins, ou pode ele mesmo
autenticar os logins.

Modos de segurança
Um modo de segurança se refere a como o DBA (administrador do banco de dados) configura
o SQL Server para autenticar usuários. Um servidor pode usar um de dois modos de
segurança: Windows NT e mista [mixed].
Logins
Um login do SQL Server é um nome que identifica um usuário para o SQL Server. Cada login
tem uma senha, que deve ser informada no caso da segurança mista (ver abaixo).
38
RESUMO APOSTILA SQL SERVER

O SQL Server cria automaticamente um login chamado 'sa' (administrador do sistema), que
não deve ser excluído. O 'sa' tem permissão para fazer praticamente tudo no banco de dados:
criar bancos de dados, tabelas, criar outros logins etc. O sa pode conceder permissões para
outros usuários poderem fazer algumas tarefas.
Nomes de usuário no banco de dados
Se você possui um login, não quer dizer que tenha acesso a todos os bancos de dados. É
preciso ter também um nome de usuário de banco de dados [database user ID], que é
relacionado com o login e permite acesso a um banco de dados específico. O nome de usuário
pode ser específico do login.
O usuário que cria um banco de dados é o dono do banco de dados [database owner]. Dentro
do banco de dados, o dono é conhecido pelo nome especial 'dbo'. Outros usuários podem ter
nomes diferentes, geralmente de acordo com o seu login. O dono do banco de dados pode
conceder permissões para outros usuários de criar e excluir objetos dentro do banco de dados.
O usuário que cria um objeto (tabela, visão, procedimento etc.) no banco de dados é o dono
deste objeto. O dono tem inicialmente todas as permissões no objeto criado, mas ele pode
conceder essas permissões a outros usuários se desejar.
Um login pode ter um alias [apelido] dentro de um banco de dados, que é o nome de outro
usuário. Nesse caso, dentro daquele banco de dados, ele funciona como se fosse aquele
usuário e tem as mesmas permissões dele. Vários usuários (logins) diferentes podem ter o
mesmo alias. Esse é um recurso que existe no SQL Server 7.0, apenas para compatibilidade
com versões anteriores, já que através de papéis [roles] e da atribuição de permissões aos
papéis, o que era feito usando aliases, pode ser feito de maneira muito mais eficaz.
O usuário guest [convidado] é um nome especial que existe em todo banco de dados e permite
a qualquer login usar o banco de dados, mesmo que não tenha um nome de usuário
relacionado.

Papéis [Roles]
Na sua essência, um papel [role] é um grupo de usuários que têm necessidades semelhantes
de acesso ao SQL Server.

Permissões
Até agora, já vimos como criar e gerenciar logins que são usados para controlar o acesso ao
SQL Server. Mas, mesmo que um usuário tenha um login e um ID de usuário válido, ele não
pode acessar qualquer dado em um banco de dados sem que lhe tenham sido dadas
permissões explícitas para acessar os objetos armazenados no banco de dados.
Permissões são usadas no SQL Server para especificar quais usuários podem ter acesso a
quais objetos de bancos de dados, e o que eles podem fazer com tais objetos. Se um usuário
não receber explicitamente a permissão para acessar um objeto, ele não terá acesso ao
mesmo. Permissões podem ser atribuídas a usuários (contas do NT Server ou do SQL Server),
grupos (grupos globais do NT Server), e papéis (papéis predefinidos de servidor, de banco de
dados e papéis personalizados de bancos de dados).

39
RESUMO APOSTILA SQL SERVER

Permissões para comandos SQL


Permissões para comandos SQL são dadas a usuários que precisam de criar um banco de
dados ou objetos de bancos de dados, ou que precisam fazer backup de bancos de dados e
seus logs de transações. Quando você atribui permissões para comandos SQL você na
verdade está dando àquele usuário específico a capacidade de executar comandos SQL
específicos.
Permissões de objetos
O tipo mais comum de permissão atribuído a usuários, grupos e papéis é a permissão de
objetos. Essas permissões determinam quem pode acessar um objeto preexistente e o que
esse usuário pode fazer com tal objeto. Quando você atribui a um usuário uma permissão de
objeto, você na verdade está dando a tal usuário a capacidade de executar certos comandos
SQL sobre objetos em um banco de dados.

Permissões implícitas
Uma permissão implícita é uma permissão que um usuário obtem apenas pelo fato de
pertencer a um papel predefinido de banco de dados ou de servidor, ou por ser o proprietário
de um objeto de banco de dados. Permissões implícitas não podem ser atribuídas a usuários.
Ao invés disso, um usuário que precise de uma permissão implícita deve ser adicionado a um
papel predefinido que já tenha tal permissão. Permissões implícitas podem assim ser atribuídas
a usuários, papéis personalizados ou grupos, com a simples atribuição dos mesmos a um
papel predefinido de banco de dados ou de servidor. As permissões implícitas também podem
ser atribuídas a usuários, grupos ou papéis personalizados definindo quaisquer destes como o
proprietário de um objeto de banco de dados específico.
Quando um usuário com a permissão de comando adequada cria um novo objeto no banco de
dados, tal como uma tabela, ele se torna o proprietário do objeto de banco de dados [Database
object owner] (DBOO) daquele objeto. Proprietários de objetos de banco de addos têm
permissões implícitas em todos os objetos que lhes pertençam, o que os dá a capacidade de
executar qualquer atividade naquele objeto, tal como SELECT, INSERT, UPDATE, DELETE,
entre outros. Eles têm controle completo dos objetos que criam.
Como dá para perceber, permitir que qualquer um seja um DBOO não é uma boa idéia.
Normalmente, as únicas pessoas que devem criar objetos de bancos de dados são DBAs ou
desenvolvedores SQL, não usuários comuns.

40
RESUMO APOSTILA SQL SERVER

10 - Backup e Restauração

Conceitos
Um backup ou dump do banco de dados é a operação de copiar os dados para um dispositivo
de backup. Pode ser feito com o Enterprise Manager ou com o comando BACKUP. Não é
necessário parar o SQL Server ou desconectar os usuários para fazer a operação de backup.
Ela pode ser feita a qualquer momento. Deve-se considerar que a realização do backup com
usuários utilizando o banco de dados, causa uma pequena queda de performance, que pode
ser perceptível aos usuários. É importante então escolher horas de menor atividade do servidor
(ou ao menos do banco de dados cujo backup está sendo feito) para a realização do backup.
Uma restauração ou RESTORE do banco de dados é a operação de trazer os dados de um
meio de backup de volta para os bancos de dados.

41
RESUMO APOSTILA SQL SERVER

11 - Outros Recursos

Configuração do SQL Server


O SQL Server tem várias opções de configuração, que geralmente podem ser deixadas com os
valores default mas que, em alguns casos, podem ser alteradas para melhorar o desempenho
ou a compatibilidade com os padrões ANSI.
Para alterar essas opções, use o Enterprise Manager.

Entendendo as Tabelas de Sistema


As tabelas de sistema contêm informação atualizada automaticamente pelo SQL Server, que
não pode ser alterada diretamente. No entanto, elas são úteis para fazer consultas à própria
estrutura do banco de dados. Essas tabelas são todas documentadas no help do SQL Server
(Transact-SQL Help).

Importação e Exportação de Dados


O programa BCP é um utilitário de linha de comando (não gráfico) usado para importar ou
exportar tabelas de/para o SQL Server. Ele reconhece formatos de texto, bem como formatos
binários. Para exportar o conteúdo da tabela Cliente, por exemplo, para um arquivo chamado
CLIENTE.TXT, use-o da seguinte forma, na linha de comando (console do Windows NT ou
prompt do DOS no Windows 9x):

Publicando dados na Internet


O SQL Server Web Assistant permite publicar dados do SQL Server em formato HTML, ou seja
páginas Web. Essas páginas podem ser colocadas num servidor Web e visualizadas numa
Intranet ou na Internet com um browser (programa que visualiza HTML). As páginas, a priori,
não são alteradas dinamicamente, mas com o uso do Assistente, você pode definir uma
periodicidade de atualização da página.

Sinval Hygino Brandão Filho


Cpf: 41120450772
E-Mail : [email protected]

42
RESUMO APOSTILA SQL SERVER

43

Você também pode gostar