Apostila de Sql Server 2005
Upcoming SlideShare
Loading in...5
×
 

Apostila de Sql Server 2005

on

  • 654 views

Apostila de SQL Server 2005

Apostila de SQL Server 2005

Statistics

Views

Total Views
654
Views on SlideShare
653
Embed Views
1

Actions

Likes
0
Downloads
53
Comments
0

1 Embed 1

https://cesbonline.com.br 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Apostila de Sql Server 2005 Apostila de Sql Server 2005 Document Transcript

  • Apostila de MS SQL Server Pág.: 1 / 86 Conceitos O que é um Banco de Dados? Em termos simples, um banco de dados é uma coleção de dados, onde os dados são armazenados em tabelas. Alguns gostam de pensar em um banco de dados como um mecanismo organizado que tem a capacidade de armazenar informações, pela qual um usuário pode recuperar as informações armazenadas de uma amaneira eficaz e eficiente. Um banco de dados relacional é um banco de dados dividido em unidades lógicas chamadas tabelas, em que as tabelas são relacionadas entre si dentro do banco de dados. Um banco de dados relacional permite dividir os dados em unidades lógicas menores, mais gerenciáveis, oferecendo melhor e mais fácil manutenção e desempenho ótimo do banco de dados de acordo com o nível de organização. O Que é SQL? SQL (Structured Query Language) é a linguagem padrão utilizado para comunicar-se com um banco de dados relacional. O protótipo original foi desenvolvido pela IBM utilizando o artigo do Dr. E. F. Codd (“A Relational Modelo of Data for Large Shared Data Banks”) Modelo Relacional de Informações de Dados para Grandes Bancos de Dados Compartilhados. Visão geral do Transact-SQL Transact-SQL é a linguagem do SQL Server para definição, consulta e manipulação de dados. Essa linguagem é baseada no padrão ANSI SQL-92, também suportado por outros bancos de dados, e acrescenta extensões ao padrão ANSI, exclusivas do SQL Server. SQL é a sigla de estruture Query Language, embora ela faça bem mais do que consulta. Os comandos Transact-SQL podem ser divididos nas seguintes categorias (note que isso não abrange todos os comandos, só os comuns que serão utilizados nesse curso): DLL, DML, Comandos Select e DCL ANSI SQL Significa American National Standards Institute, uma organização que é responsável por planejar padrões para vários produtos e conceitos. No caso do SQL, isso fornece um esqueleto básico de fundamentos básicos necessários, que como um resultado final, permite consistência entre várias implementações. Com a linguagem SQL podemos nos comunicar com qualquer banco de dados que trabalhe com o sistema (RDBMS), afinal, se tivéssemos uma linguagem para cada banco de dados, ficaria difícil a comunicação e até mesmo a migração desses dados entre bancos de dados. Exemplo, imagine que cada país fosse um banco de dados, logo, cada país tem uma língua nativa, dificultando então a comunicação entre eles, com isso, teríamos que aprender cada língua desses países. Assim como o inglês que é uma língua de comunicação universal, o SQL é a língua universal de comunicação entre banco de dados relacional, tornando mais fácil a comunicação entre os usuários e aplicativos com o banco de dados. Sessões de SQL
  • Pág.: 2 / 86 Apostila de MS SQL Server É uma ocorrência de um usuário que interage com um banco de dados relacional por meio da utilização de comandos de SQL. Comandos válidos de uma sessão SQL podem ser inseridos para consultar o banco de dados, manipular dados e definir estruturas do banco de dados, como tabelas. Quando um usuário conecta-se a um banco de dados, a sessão de SQL é inicializada. Sistemas Gerenciadores de Banco de Dados O acesso a informações em sistemas em sistemas de processamentos de dados que não utiliza Sistemas Gerenciadores de Bancos de Dados (SGBDs), é feito pelo acesso seqüencial a um ou mais arquivos. Cabe ao desenvolvedor criar mecanismo de recuperação da informação. Com a utilização de um SGBD, porém, o acesso fica diferente: pede-se as informações ao gerenciador de banco de dados e elas são devolvidas pelo mesmo. O processo pode ser comparado a uma compra em uma loja de departamento e uma compra em uma loja de autopeças, no primeiro caso o cliente dirige-se a loja e procura por todas as seções, encontra o produto desejado e efetua a compra. Já na segunda o cliente pede o ao balconista o item desejado e este entrega-o.No caso da compra em loja de departamentos o trabalho é toda do cliente, sendo este responsável inclusive pelas especificações necessárias (fazer a escolha certa). Já na loja de auto peças, o balconista assume toda a responsabilidade pela entrega da mercadoria desejada. Arquitetura Cliente-Servidor O SQL Server é um banco de dados relacional, destinado a ser compatível com aplicações que apresentam arquitetura Cliente/Servidor, no qual o banco de dados fica residente em um computador central chamado Servidor e cujas informações são compartilhados por diversos usuários que executam as aplicações em seus computadores locais ou clientes. A arquitetura Cliente/Servidor reduz consideravelmente o tráfego de rede, pois retorna ao usuário apenas os dados solicitados.
  • Apostila de MS SQL Server Pág.: 3 / 86 Arquitetura do SQL Server O Banco de dados SQL Server é dividido em diversos componentes lógicos, como tabelas, índices, visões e outros componentes visíveis para o usuário. Um servidor SQL Server pode conter vários bancos de dados pertencentes a diversos usuários. Cada instância de um SQL Server 2005 possui quatro bancos de dados de sistema (System Databases) chamados master, model, tempdb e msdb. Cada um desses bancos de dados é exigido pelo SQL Server e não pode ser renomeado e nem removido sem antes desativar o SQL Server. Os dois outros bancos de dados que são criados o pubs e northwind, são bancos de dados de usuário e são bancos de dados de exemplo e podem ser removidos sem afetar as operações do SQL Server. Embora ambos os tipos de bancos de dados (Sistema e Usuário) armazenem dados, o SQL Server utiliza os bancos de Sistema para operar e gerenciar o sistema. R Master É o banco de dados principal de configuração do SQL Server. Ele contém informações em todos os bancos de dados que existe no servidor, incluindo os arquivos de banco de dados físico e suas localizações, também contém as definições de configuração e contas de login do SQL Server. Informações contidas no Banco de Dados Master: • • • • • Registro de servidor e logins remotos, Bancos de dados e arquivos de banco de dados locais, Contas de logins, Processos e trancaduras, Definição de configurações de servidor. Com estas informações, é valido dizer que um backup atual do banco de dados master é crucial para qualquer recuperação do servidor.
  • Pág.: 4 / 86 Apostila de MS SQL Server O processo de instalação cria o banco de dados master (master.mdf) e o arquivo de log do banco de dados master (masterlog.ldf) no diretório do C:Arquivos de programasMicrosoft SQL ServerMSSQLData. No caso de um banco de dados master ser corrompido ou destruído e não puder ser restaurado do backup, você poderá reconstruir o banco de dados master no seu estado padrão, a Microsoft fornece um utilitário chamado rebuildm.exe, que esta localizada no subdiretório C: Arquivos de programasMicrosoft SQL Server80ToolsBinn. Após reconstruir o banco de dados master, você terá que fazer manualmente qualquer alteração de configuração e registro de banco de dados e servidor, além de recriar os logins para restaurar o servidor no seu estado anterior. Tempdb O Banco de dados Tempdb é usado para o armazenamento de tabelas temporárias e stored procedures temporários. O banco de dados Tempdb é recriado toda vez que o SQLServer for iniciado, então o Tempdb não poderia ser usado para o armazenamento de dados persistente. As tabelas e as procedures temporárias que são geradas pelo SQL Server são soltas automaticamente quando as conexões são fechadas. Por isso se não houver atividade de conexão, o Tempdb fica vazio, todos os bancos de dados e processos no SQL Server compartilham o Tempdb para gravação de trabalhos. O arquivo de banco de dados Tempdb (tempdb.mdf) e os arquivos de log (templog.ldf) estão no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLData. Msdb É um banco de dados do sistema que é utilizado por vários componentes do SQL Server, como o serviço do SQL Server Agent. Além da configuração do SQL Server Agent e das informações sobre a tarefa, a replicação, o envio de log e os dados de plano de manutenção são armazenados no banco de dados Msdb. Informações contidas no banco de dados Msdb: • plano • • Informações sobre o plano de manutenção do banco de dados, como função e histórico do de manutenção. Informações sobre os publicadores e os distribuidores de replicação. Informação sobre a configuração do envio de log e monitoramento. O arquivo de banco de dados msdb (msdb.mdf) e os arquivos de log do Msdb (msdb.ldf) estão localizados no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLData. Devido à quantidade de informações sobre configuração armazenadas no Msdb, o backup do banco de dados é recomendado rotineiramente. Se o banco de dados Msdb for corrompido, você poderá reconstruir um Msdb padrão usando um script de construção do SQL Server instalado no processo de instalação. O filename do script de instalação do Msdb é instmsdb.sql e esta localizado no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLInstall. Se o banco de dados Msdb não existir, o script o criará primeiro e, em seguida construirá todos os objetos de banco de dados necessários, depois você poderá ter que reconfigurar todas as funções de programação, planos de manutenção, envio de log e configuração de replicação.
  • Apostila de MS SQL Server Pág.: 5 / 86 Model É um banco de dados template que o SQL Server usa para criar novos bancos de dados. Cada vez que você cria um banco de dados novo no SQL Server, o conteúdo do banco de dados Model é copiado para dentro do novo banco de dados para estabelecer seus objetos padrões, incluindo tabelas, stored procedures e outros objetos de banco de dados. O banco de dados é necessário mesmo que você não pretenda criar nenhum banco de dados de usuário. Cada vez que o SQL Server é iniciado, o banco de dados Tempdb é recriado usando o Banco de dados Model como seu template. Por padrão o banco de dados encontra-se vazio ao ser criado. O arquivo de banco de dados Model (model.mdf) e os arquivos de log do banco de dados Model (modellog.ldf) são criados no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLData, durante o processo de instalação. Localização dos Bancos de dados Os bancos de dados ficam armazenados em arquivos físicos que recebem o nome de DEVICE. Um device ocupa sempre a quantidade de disco que for a ele destinada, independente da existência ou não de banco de dados em seu interior e independente da taxa de ocupação destes databases. Arquitetura de Armazenamento Físico Os Bancos de dados SQL Server são armazenados em grupos de arquivos que contem dados individuais e arquivos de log, cada banco de dados é feito de arquivos de dados principal e, opcionalmente, de secundários, assim como arquivos de log. Estes arquivos são identificados por suas extensões padrão de arquivos, arquivo de dados principal (*,mdf) e arquivo de log (*.ldf). O arquivo de log e de dados podem ser armazenados em qualquer unidade não comprimida FAT e NTFS. Com exceção dos arquivos de log, os dados no arquivos do SQL Server são gravados em unidades chamadas paginas. Cada Pagina armazena 8k de dados permitindo um Maximo de 8060 bytes em cada pagina (96bytes são usados para cada cabeçalho de pagina). Devido ao limite de dados de pagina de 8060 bytes, o tamanho Maximo de registro também é de 8060 bytes, que inclui todos os tipos de dados, exceto ntext, text e dados de imagem. Text, ntext e dados de imagem são gravados em uma coleção de páginas separadas que permitem até 2GB de informações por item de dados. Um ponteiro para estas paginas de dados é gravado com o registro fonte.
  • Pág.: 6 / 86 Apostila de MS SQL Server Trabalhando com Grupos de Arquivos Com grupos de arquivos é permitido explicitamente a colocação de objetos de banco de dados sobre um conjunto específico de arquivos de banco de dados. Isso pode ser útil para administração assim como para o desempenho, você pode colocar o grupo de arquivos sobre unidades físicas de disco separadas e depois colocar os objetos do banco de dados sobre os arquivos que são membros desse grupo de arquivos. Isso pode melhorar o desempenho por que leituras e gravações no banco de dados executam em unidades físicas de disco separadas ao mesmo tempo. Uma vantagem administrativa é que pode ser feito o backup e restaurar arquivos individuais em um grupo de arquivos. Os grupos de arquivos são criados quando se altera o banco de dados e adiciona-se arquivos a um grupo de arquivos específico. Criando Banco de Dados ( Primeiro Projeto ) CREATE DATABASE Praticando_SQL ON PRIMARY ( NAME = 'Praticando_SQL', FILENAME = 'D:LaerteBDPraticando_SQL.mdf' , SIZE = 10MB , MAXSIZE = 100MB , FILEGROWTH = 5MBKB ) LOG ON ( NAME = 'Praticando SQL_log', FILENAME = 'D:LaerteBDPraticando SQL_log.ldf' , SIZE = 5MB , MAXSIZE = 50MB , FILEGROWTH = 5MB ) Alterando Banco de Dados Para alterar o banco de dados usamos o comando ALTER DATABASE, podemos modificar o nome do banco de dados Praticando_SQL para Praticando_SQL_Server. ALTER DATABASE Praticando_SQL MODIFY NAME = Praticando_SQL_Server Adicionando FileGroup ao Banco de Dados ALTER DATABASE Praticando_SQL_Server ADD FILEGROUP SECUNDARY Adicionando mais Arquivos de Dados ao Banco de Dados
  • Apostila de MS SQL Server Pág.: 7 / 86 ALTER DATABASE Praticando_SQL_Server ADD FILE ( NAME = Praticando_SQL_Server2, FILENAME = 'D:AlunosLaerteBD2Praticando_SQL_Server.ndf', SIZE = 5MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) TO FILEGROUP SECUNDARY Excluindo Arquivos de Dados ao Banco de Dados ALTER DATABASE Praticando_SQL_Server REMOVE FILE Praticando_SQL_Server2 Excluindo FileGroup do Banco de Dados ALTER DATABASE Praticando_SQL_Server REMOVE FILEGROUP SECUNDARY Excluindo o Banco de Dados DROP DATABASE Praticando_SQL_Server
  • Pág.: 8 / 86 Apostila de MS SQL Server Criando o Banco de Dados com Wizard (Segundo Projeto) O caminho mais rápido para Se criar um novo branco do banco de dados Utilizando Microsoft SQL Server Management Studio Express é fazer um clique direito sobre o Databases e em seguida escolher a opção “New Database...” , como mostrado na imagem abaixo. Surgira então a Caixa de Dialgo New Database, que veremos logo a seguir.
  • Apostila de MS SQL Server Pág.: 9 / 86 O primeiro passo do assistente apresenta o quadro a baixo figura - . figura - Caixa de Dialgo New Database Tabela de Definições para Caixa de Dialgo New Database Propriedade Logical Name File Type File Group Initial Size Definição Nome da base de dados. Referenciado em conexões. Tipo de dados armazenado. Dados ou Log de operações. Grupo a que pertence o arquivo, identificado por um endereço físico. Tamanho inicial do arquivo de dados. Apartir de MB. Autogrowth Conforme demosntrado na caixa de dialogo “Change Autogrowth for Banco_Curso”, define parâmetros que determinarão a forma em que os arquivos de dados irão se expandir. Path Endereço (diretório) onde são armazenados os arquivos de dados. File Name Nome do arquivo de dados, com sufixo .MDF para arquivo de dados e .LGF para arquivo de log.
  • Pág.: 10 / 86 Apostila de MS SQL Server Caixa de Dialgo Change Autogrowth Propriedade Enabled Autogrowth File Growth Definição Habilita ou não crescimento automático, baseado em parâmetros. Define crescimento em percentual ou Megabytes. Restinge crescimento da área em Megabytes ou permite crescimento Maximum File Size indeterminado. Tabela de Definições para Caixa de Dialgo Change Autogrowth Vamos Preencher com os valore inseridos conforme a figura – e quando pronto clicar no botão “OK”, ai estara criado o nosso “BD_(Nome do Aluno)_SQL”.
  • Apostila de MS SQL Server Criando Group File’s com Wizard Criando um FileGroup’s 1/2 Criando um FileGroup’s 2/2 Pág.: 11 / 86
  • Pág.: 12 / 86 Apostila de MS SQL Server Adicionando Arquivos (File) de Dados ao Banco de Dados com Wizard
  • Apostila de MS SQL Server Pág.: 13 / 86 Estrutura da Linguagem SQL A linguagem SQL é dividida em subconjuntos de acordo com as operações que queremos efetuar sobre um banco de dados. Neste curso aprenderemos apenas sobre os dois primeiros subconjuntos, mas é importante que o estudante tenha uma noção geral dos subconjuntos básicos. Tipos de Comandos de SQL Linguagem de definição de dados (DDL, Data Definition Language) É um conjunto de comandos dentro da SQL usada para a definição das estruturas de dados, fornecendo as instruções que permitem a criação, modificação e remoção das tabelas, assim como criação de índices. Estas instruções SQL permitem definir a estrutura de uma base de dados, incluindo as linhas, colunas, tabelas, índices, e outros metadados. Entre os principais comandos DDL estão CREATE (Criar), DROP (deletar) e ALTER (alterar). Linguagem de manipulação de dados (DML, Data Manipulation Language) é o grupo de comandos dentro da linguagem SQL utilizado para manipular dados dentro de objetos de um banco de dados relacional: recuperação, inclusão, remoção e modificação de informações em bancos de dados. Os principais comandos DML são SELECT (Seleção de Dados), INSERT (Inserção de Dados), UPDATE (Atualização de Dados) e DELETE (Exclusão de Dados). Linguagem de controle de dados (DCL, Data Control Language) é o grupo de comandos que permitem ao administrador de banco de dados controlar o acesso aos dados deste banco. Alguns exemplos de comandos DCL são: • GRANT: Permite dar permissões a um ou mais usuários e determinar as regras para tarefas determinadas; • REVOKE: Revoga permissões dadas por um GRANT. As tarefas básicas que podemos conceder ou barrar permissões são: • CONNECT • SELECT • INSERT • UPDATE • DELETE • USAGE
  • Pág.: 14 / 86 Apostila de MS SQL Server Comandos de Administração de Dados Permitem ao usuário realizar auditorias e realizar análises em operações dentro do banco de dados, são dois comandos gerais de administração de dados: START AUDIT STOP AUDIT Comandos de Controle Transacional Permitem ao usuário gerenciar transações dentro de banco de dados. Comando Commit RollBack Definição Salvar transações dentro do banco de dados. Desfaz transações dentro do banco de dados. SavePoint Cria pontos dentro de grupos de transações até que eles desfaçam as transações com rollback ou salvar com commit. Set Transaction Atribui um nome em uma transação.
  • Apostila de MS SQL Server Pág.: 15 / 86 Procedimentos Armazenados do Sistema Um procedimento armazenado [stored procedure] é uma seqüência de comandos da linguagem Transact-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 Máster e automatizam várias tarefas comuns de gerenciamento. Por Exemplo, o procedimento sp_databases mostra quais os nomes de bancos de dados existentes. Exemplos de estored procedures armazenados: • • sp_databases – mostra quais os nomes de bancos de dados existente. sp_helpdb aula – mostra informações sobre o banco de dados aula. Note que todos os procedimentos armazenados do sistema têm nomes que começam com ‘sp_’ (abreviatura de System Procedures). Ao executar um procedimento que inicie com ‘sp_’ o procedimento sera procurado no banco de dados atual, se não for encontrado ele será procurado no banco de dados Máster. Quando um procedimento inicia com ‘xp_’ ele é um procedimento estendido, quer dizer que não foi escrito em SQL, mas foi compilado como parte de uma DLL. Exemplo: xp_cmdshell ‘calc.exe’
  • Pág.: 16 / 86 Apostila de MS SQL Server Tabelas Entidades, Relacionamentos e Atributos Quanto mais organizadas estiverem as informações no Banco de dados, mais forte será a “Conversa” com o Gerenciador de Banco de Dados. Para Isso criou-se um modelo chamado de Modelo de Entidade e Relacionamentos, do qual fazem parte três elementos: Entidades: Uma entidade é um objeto de interesse do qual podem ser colecionadas informações. Ex: Tabelas de clientes, Tabela de pedidos de clientes. Relacionamentos: As entidades podem ser relacionadas entre si pelos relacionamentos. Ex: Entidade de Clientes e Entidade de Pedidos (“clientes fazem pedidos”). Atributos: São as características das entidades. São representadas pelas colunas das tabelas. Ex: nome, endereço, telefone e etc. Componentes de uma Tabela O armazenamento e a manutenção de dados valiosos é a razão para a existência de qualquer banco de dados. Lembre-se de que uma tabela é a forma mais simples de armazenamento de dados em um banco de dados relacional. A seguir os componentes de uma tabela: Campo: É uma coluna em uma tabela que é projetada para manter informações específicas sobre cada registro na tabela. Ex: ID_CLIENTE NOME ENDEREÇO TELEFONE Registro ou Linha de dados: É cada entrada individual que existe em uma tabela. Ex: ID_CLIENTE 20003 20004 NOME João da Silva Marcos Pereira ENDEREÇO R. Conde Pameira R. Paula Frontes TELEFONE 3333-3235 2522-8589 Coluna: É uma entidade vertical em uma tabela que contém todas as informações associadas com um campo específico em uma tabela. Ex: ID_CLIENTE 20003 20004 20005
  • Apostila de MS SQL Server Pág.: 17 / 86 Criando Tabelas Uma tabela [table] é um objeto do banco de dados, composto de zero ou mais linhas [rows], contendo os dados, organizados em uma ou mais colunas [columns]. Para criar a tabela você pode usar o Enterprise Manager ou utilizando comandos SQL DDL (Data Definition Language ) no SQL Query Analyzer. Antes de criar suas tabelas, é importante levar em conta um bom projeto do banco de dados, que determina quais as informações a serem guardadas. Tipos de Dados Cada coluna tem um tipo de dados [data type], que determina que tipo de informações (caracteres, números, datas/horas) podem ser colocadas nas colunas e quais as características desses dados. O tipo de dados é determinado quando a tabela é criada e não pode ser alterado posteriormente. Você pode usar tipo de dados do sistema, predefinidos, ou criar novos tipos de dados, chamados tipo de dados do usuário baseados nos tipos de dados existentes. Os tipos de dados existentes são: Tipo Definição Tamanho Char(n), Caracteres Alpha Numéricos – Posição Fixa Até 4.000 Varchar(n) Caracteres Alpha Numéricos – Posição Não Fixa Até 4.000 Decimal(p,e) Caracteres Numéricos com definiçao de precisão e escala Até (38,38) numeric(p,e) Caracteres Numéricos com definiçao de precisão e escala Até (38,38) BigInt Caracteres Numéricos Inteiros de 8 bytes –2^63 a 2^63-1 Int Caracteres Numéricos Inteiros de 4 bytes –2^17 a 2^17-1 SmallInt Caracteres Numéricos Inteiros de 2 bytes –2^14 a 2^14 -1 TinyInt Caracteres Numéricos Inteiros de 1 byte –2^7 a 2^7 -1 Real Caracteres Numéricos de Ponto Flutuante de 8 bytes 15 digitos Money Caracteres Numéricos de 4 Casas Decimais de 8 bytes –2^63 a 2^63-1 Smallmoney Caracteres Numéricos de 4 Casas Decimais de 4 bytes –2^17 a 2^17-1 Datetime Caracteres de Data e Hora de 4 bytes Smalldatetime Caracteres de Data e Hora de 2 bytes Binary(n) Tipos de Dados Binários de tamanho Fixo de bytes de n. n deve ser um valor de 1 a 8000 January 1, 1753-December 31, 9999 January 1, 1900, through June 6, 2079 Bytes n+4 varbinary(n) Tipos de Dados Binários de tamanho variável de bytes de n. n Comprimento real dos dados deve ser um valor de 1 a 8000 + 4 bytes, não bytes de n Imagem Tipos de Dados Binários de tamanho variável 2^31-1 Text, Caracteres Alpha Numéricos de tamanho variável 2^30-1 Bit Caracteres Numéricos de 1 bit 0-1
  • Pág.: 18 / 86 Apostila de MS SQL Server Criando Tabelas do Projeto de Aula Tabela de Clientes CREATE TABLE Clientes ( ID_Cliente Bigint Nome varchar (50) Cnpj char (25) Tipo char (1) Status Bigint Data datetime Credito money ) NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NULL Criando a Tabela de Produtos CREATE TABLE Produtos ( ID_Produto Bigint Descricao varchar (25) PrecoCompra money Saldo Bigint ) NOT NULL , NOT NULL , NOT NULL , NOT NULL Criando a Tabela de Pedidos no Filegropes Secundary CREATE TABLE Pedidos ( ID_Pedido Bigint ID_Cliente Bigint DataPed datetime ) On SECUNDARY NOT NULL , NOT NULL , NOT NULL
  • Apostila de MS SQL Server Pág.: 19 / 86 Criando a Tabela de Itens no Filegropes Secundary utilizando Wizard Acione com o botão direito do mouse na caixa de dialogo Object Explore, clicando em New Table. Logo em seguida pode ser definido aspectos como nome da tabela, local de armazenamento e a qual esquema pertence. Para tanto, observe a caixa de dialogo Properties. CREATE TABLE Itens ( ID_Pedido Bigint ID_Produto Bigint Quantidade Bigint PrecoVenda money ) On SECUNDARY NOT NULL, NOT NULL, NOT NULL, NOT NULL Área de Trabalho – Create Table Nota 01: Observe a tabela de tipos pagina 17, anteriormente exibida nessa apostila visando conhecer os vários tipos possíveis para cada coluna da tabela. Nota 02: Ao final, ainda não sendo definido o nome da tabela, será solicitado conforme caixa de dialogo
  • Pág.: 20 / 86 Apostila de MS SQL Server Choose Name. Nota 03: Nessa etapa podemo definir a Chave-Primária da tabela, bastando somente definir (selecionar usando a tecla shift) as colunas que irão compor essa chave, e com o botão direito do mouse optar por Set Primary Key. Caixa de Dialogo Choose Name
  • Apostila de MS SQL Server Pág.: 21 / 86 Constraints Chave Primária [Primary Key] A chave primaria [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. Na criação da tabela, essa restrição pode ser definida da seguinte forma (quando a chave primária é composta de uma só coluna): Definindo Primary Key (Chave Primária) na criação da tabela CREATE TABLE Clientes2 ( ID_CLIENTE NOME CNPJ TIPO STATUS DATA_CADASTRO HISTORICO CREDITO ) bigint not null identity (1,1) primary key, varchar (50) not null, char (18) not null, char (1) not null, bit not null, datetime not null, Text, money, Obs.: Uma chave primária pode ser acrescentada à tabela depois que ela foi criada com o comando ALTER TABLE. Por exemplo, vamos criar chaves primárias à tabela clientes de duas maneiras distintas: 1ª Maneira: ALTER TABLE Clientes add primary key (id_cliente) 2ª Maneira: ALTER TABLE Clientes add constraint PK_Clientes primary key (id_cliente) Utilizando o Wizard para definir “Primary Key”. No Enterprise Manager, podemos facilmente definir a Primary Key, clicando com o botão direito sobre a
  • Pág.: 22 / 86 Apostila de MS SQL Server tabela e na caixa de dialogo escolher a opção “Desing”, em ai selecionando as linhas (que representam coluna), clicando em seguida com o botão direito do mouse e escolhendo no menu de contexto a opção “Set Primary Key”. Pronto esta setado a coluna “ID_Cliente” como Primary Key!
  • Apostila de MS SQL Server Pág.: 23 / 86 Criando Chave Primária para as Tabelas do Projeto ALTER TABLE ALTER TABLE ALTER TABLE Produtos Pedidos Itens_Pedidos add constraint add constraint add constraint PK_Produtos PK_Pedidos PK_Itens primary key primary key primary key (id_produto) (id_pedido) (Id_Pedido , Id_Produto) Unicidade [Unique] Uma restrição unique em uma coluna ou grupo colunas determina que seu valor deva ser único na tabela. Esse tipo de restrição é usado para chaves alternadas, ou seja, valores que se repetem na tabela além da chave primária. Pode haver várias restrições UNIQUE na tabela e as colunas de uma restrição UNIQUE permitem valores nulos. Repare na sintaxe: ALTER TABLE Clientes ADD UNIQUE (CNPJ) 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 ‘dbo.itens’ será usada para relacionar dados de produtos e pedidos. Ela contém as colunas ID_PRODUTO e ID_PEDIDO. Uma chave estrangeira é 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 ‘dbo.itens’: ID_PEDIDO faz referencia a coluna ID_PEDIDO da tabela dbo.pedidos e ID_PRODUTO que faz referência à coluna ID_PRODUTO da tabela dbo.produtos e uma chave estrangeira na tabela ‘dbo.pedidos’: ID_CLIENTE que faz referencia a coluna ID_CLIENTE da tabela ‘dbo.clientes’, como seguem abaixo: ALTER TABLE FOREIGN KEY pedidos (id_cliente) ADD CONSTRAINT References fk_pedidos_clientes clientes (id_cliente) ALTER TABLE FOREIGN KEY Itens (id_pedido) ADD CONSTRAINT References fk_itens_pedidos pedidos (id_pedido) ALTER TABLE FOREIGN KEY Itens (id_produto) ADD CONSTRAINT References fk_itens_produtos produtos (id_produto) 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 'dbo.clientes2' Esse comando mostra informações sobre a tabela, inclusive os nomes de cada restrição. Para excluir, usa-se ALTER TABLE, com a opção DROP (independente do tipo de restrição).
  • Pág.: 24 / 86 Apostila de MS SQL Server ALTER TABLE clientes 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. ALTER TABLE itens NOCHECK CONSTRAINT nome_da_restrição Diagrama entidade relacionamento Diagrama entidade relacionamento é um modelo diagramático que descreve o modelo de dados de um sistema com alto nível de abstração. Ele é a principal representação do Modelo de Entidades e Relacionamentos. É usado para representar o modelo conceitual do negócio. Não confundir com modelo relacional, que representam as tabelas, atributos e relações materializadas no banco de dados. MER: Conjunto de conceitos e elementos de modelagem que o projetista de banco de dados precisa conhecer. O Modelo é de Alto Nível. DER: Resultado do processo de modelagem executado pelo projetista de dados que conhece o MER. [editar]Tipos de relações Os tipos de relações que são utilizadas neste diagrama: Relação 1..1 (lê-se relação um para um) - indica que as tabelas têm relação unívoca entre si. Você escolhe qual tabela vai receber a chave estrangeira; Relação 1..n (lê-se um para muitos) - a chave primária da tabela que tem o lado 1 vai para a tabela do lado N. No lado N ela é chamada de chave estrangeira; Relação n..n (lê-se muitos para muitos) - quando tabelas têm entre si relação n..n, é necessário criar uma nova tabela com as chaves primárias das tabelas envolvidas, ficando assim uma chave composta, ou seja, formada por diversos campos-chave de outras tabelas. A relação então se reduz para uma relação 1..n, sendo que o lado n ficará com a nova tabela criada.
  • Apostila de MS SQL Server Pág.: 25 / 86 Diagrama Diagrama de Entidade e Relacionamento (DER). Através deste diagrama poderemos representar, de forma sucinta e bem estruturada, todos os elementos essenciais abstraídos no processo de análise de sistemas. Denominamos entidade (retângulo) estes elementos. Atribuímos a cada entidade definida atributos pertinentes ao sistema. Desta forma, podemos definir conceitualmente que representaremos como entidades aqueles elementos no qual gostaríamos de armazenar dados – que por sua vez, são representados pelos atributos. Através do relacionamento (losango) representaremos o tipo de relação existente entre as entidades.
  • Pág.: 26 / 86 Apostila de MS SQL Server Criando Chave Estrangeira com Wizard Basta selecionar a coluna desejável, clicando com o botão direito do mouse na opção RelationsShips, clicando em seguida no botão Add. Imediatamente a caixa de dialogo Foreign Key RelationsShips passa apresentar as propriedades conforme ilustrado. Caixa de Dialogo Foreign Key RelationsShips Propriedade Definição Quando assinaldo Yes, verifica a existência de dados que possam Check Existing Data impedir a criação da chave, devido a existência de valores na coluna on Create não válidos. Não válidos aqui refere-se a valores não encontrados previamente na coluna de referência na tabela de referência. Exibe uma Caixa de Dialogo onde é solicitado: Tables and Columns Escolha das colunas que irão compor a chave estrangeira. Escolha da tabela de referência (Foreign Table) e a coluna nessa tabela Especification onde será verificado a existência prévia de valor correspondente quando da inclusão ou auteração de registros. Name Nome da chave estrangeira, normalmente no padrão FK_NomeTabelaOrigem_NomeTabelaDestino Tabela de Definições para Caixa de Dialogo Foreign Key RelationsShips
  • Apostila de MS SQL Server Pág.: 27 / 86 Índices Porque Í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 [Indexes ou Índices] automaticamente em varias situações para acelerar a pesquisa e atualização de dados. Por exemplo: • Se uma coluna esta na cláusula WHERE em um comando SELECT, UPDATE ou DELETE, o SQL Server verifica as condições mais rapidamente se houver um índice, caso contrário ele faz uma varredura seqüencial da tabela [table scan]. • Se uma coluna é muito usada para ordenar valores (com ORDER BY), essa ordenação é 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 eficientes se ela estiver indexada. 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. Para criar um Índice usamos o comando CREATE INDEX. Alguns Exemplos do comando “CREATE INDEX”: CREATE INDEX Idx_Clientes_Nome ON Clientes(Nome) CREATE INDEX Idx_ProdutoS_Descricao ON Produtos(Descricao) On SECUNDARY CREATE INDEX Idx_Pedidos_DataPed ON Pedidos(DataPed) On SECUNDARY
  • Pág.: 28 / 86 Apostila de MS SQL Server Criando Índices com Wizard Antes de mas nada vamos excluir o index na Tabela Produtos. Ai sim Clicando sobre o nó Table, em seguida procedendo da mesma maneira com o nó que representa a tabela onde criaremos o índice, selecione e clique em seguida com o botão direito do mouse sobre o nó Index. A caixa de dialogo New Index combinada com a caixa de dialogo Select collumns proverá todo o processo. Ainda, observe nas tabelas de referência dessas ciaxas de dialogos as definições para cada propriedade envolvida. Caixa de dialogo New Index – Aba General
  • Apostila de MS SQL Server Propriedade Index Name Index Type Index Columns Definição Naturalmente o nome do objeto Idx_NomeTabela_NomeCampos Index, no Pág.: 29 / 86 padrão desejável NonClusterd ou Clustered. Nesse caso não, uma vez que somente um índice clusterizado pode existir em uma tabela. Um índice clusterizado ordena fisicamnente uma tabela pela coluna ou colunas indicadas, aasim, como naturalmente a criação da chave primária (indicando a locuna ID_PRODUTO) gerou um índice clusterizado, não há mais possibilidade. Um índice clusterizado é desejável por não necessitar de uma tabela extra para o índice, economizando espaço em mídia e pelo fato de ser mais rápido já que os daados serão ordenados ficamente na tabela. Key A partir do botão Add, podemos escolher as colunas que irão compor o Índice. Caixa de dialogo Selct Colummns
  • Pág.: 30 / 86 Apostila de MS SQL Server Aspectos Importantes na Criação de Índices Base de dados para serém eficientes, necessitam de índices e sobretudo, de bons índices. Algumas características observadas na caixa de dialgo New Index, especificamente na Aba Options concorrem para isso. Veja na tabela sobre definições algumas dessas características. Caixa de Dialogo New Index – Aba Options Propriedade Automatically statistics Definição recompute Mantém estatísiticas úteis na execução de futuros Seclects. Desejável, mas com o inconviniente de gerar dados extas na base. Não provocar lock de registros quando obtenção de daods. A prática de uso de Use row locks when negócios atuais (uso de banco de accessing the index concorrência de dados, sobretudo nos web. sendo utilizado index para lock é raro nos modelos de dados) pois impacta a modelos que atemdem a Armazena resultados na base temporária para recuperação mais Stored intermediate sort rápida imediatamente após sua execução. Isso pode ajuda na result in tempdb performance de uma seleção subsequente. Set fill factor Define o percentual de uso das páginas de índices. O aconselhável é 80%, determinando uma sobra de 20% em cada página de índice. Essa sobra de espaço, prove solução para quando da entrada de um novo registro, que provocaria a divisão da página de índice em duas, acomodando esse valor, que devido ao critério de indexação deveria estar nessa página. Isso retarda mas não evita em definitivo a fragmentação pela divisão de páginas de índices cheias.
  • Apostila de MS SQL Server Pág.: 31 / 86 Linguagem SQL Inserindo Dados ( DML ) Em um banco de dados, inserir dados em uma tabela, significa preencher uma linha de determinada tabela com dados correspondentes aos tipos determinados naquela tabela. Esta inserção de dados deve seguir as regras de integridade da tabela, assim como respeitar as regras de chave primária estabelecidas na tabela. O comando “INSERT” insere linhas em uma tabela. A forma mais simples do comando insert somente uma linha de dados. Nesse caso, são informados os valores de todas as colunas da tabela, na ordem em que elas foram definidas na tabela. Mas é possível inserir dados parciais de apenas algumas colunas, desde que a mesma não estejam definidas como “NOT NULL” . Na linguagem SQL, para inserirmos dados em uma tabela, utilizamos o seguinte comando: INSERT INTO Nome_Tabela VALUES (valor 1, valor2, valor3,...) Obs.: Os valores valor1 , valor2, etc..., seguem a ordem dos campos da tabela, sendo utilizado valor vazio (' ') para campos que não necessitem de preenchimento. Dados de tipo numérico podem ser escritos sem a necessidade de aspas simples. Dados do tipo carácter (como char e varchar), devem ser escritos entre aspas simples. Exemplo: INSERT INTO Clientes VALUES ( 1 , 'MADEIRAS SAMAN' , '0002002/0001' , 'J' , 1 , 2003/6/25 , 1505.00 ) Tabela de Clientes ID_Cliente Nome CNPJ Tipo Status Data Crédito 1 MADEIRAS SAMAN 0002002/0001 J 1 25/06/2003 1.505 2 CAR VEICULOS 10025600/0001 J 1 12/04/2005 1.112 3 CARLOS PEDREIRA 052116852-85 F 1 12/04/2004 500.00 9 FERNADA FERRAZ 011452369-85 F 1 11/02/2002 250.00 10 DANIEL SILVA 014548987-20 F 1 16/03/2001 150.00 11 FRAN ADESIVOS 2005006/0001 J 0 05/04/2005 50.00 12 SAPATOS E CIA. 10060085/0001 J 1 05/05/2003 900.50 13 CALÇADOS VARTA 2002550/0001 J 0 12/07/2001 874.60 21 SALE ADVOGADOS 00010003/0001 J 1 04/06/2004 20.00 22 PAULA MEDEIROS 003254896-84 F 0 01/06/2002 10.00
  • Pág.: 32 / 86 Apostila de MS SQL Server Tabela de Pedidos INSERT INTO Pedidos VALUES (1 , 1 , 10-05-2010) ID_PEDIDO ID_CLIENTE DATAPED 1 1 10/05/2007 2 2 10/05/2007 3 1 25/05/2007 4 3 01/06/2007 5 9 04/06/2007 6 9 27/06/2007 7 10 10/07/2007 8 2 13/07/2007 9 10 15/07/2007 Tabela de Produtos INSERT INTO Nome_Tabela VALUES ( valor 1 , valor2 , valor3 , valor4 ) ID_PRODUTO 1 2 3 5 7 10 11 12 21 22 DESCRIÇÃO CANETA LAPIS BORRACHA PAPEL LISO PAPEL A4 COLA GRAMPO COPO PLASTICO CADERNO FICHAS PRECO_CPOMPRA 0.19 0.10 0.05 5.60 5.80 1.19 1.52 1.06 2.26 2.42 SALDO 20 112 42 23 22 3 52 14 16 120
  • Apostila de MS SQL Server Tabela de Itens INSERT INTO Nome_Tabela VALUES ( valor 1 , valor2 , valor3 , valor4 ) ID_PEDIDO 01 01 02 03 03 03 04 04 04 05 ID_PRODUTO 1 2 2 3 7 1 2 7 1 3 QUANTIDADE 2 16 10 11 8 45 14 9 10 18 PRECO_VENDA 2,50 1,75 1,75 4,00 0,25 2,50 1,75 0,25 2,50 4,00 Pág.: 33 / 86
  • Pág.: 34 / 86 Apostila de MS SQL Server Atualizando Dados Os dados em uma tabela pode ser modificada utilizando o comando UPDATE. O comando update não adiciona novos registros a uma tabela, e nem remove os registros, simplesmente atualiza os dados existentes. A forma mais simples da instrução update é a sua utilização para atualizar uma única coluna em uma tabela. Tanto uma única linha de dados como numerosos registros podem ser atualizados ao atualizar uma única coluna em uma tabela. Synopsis UPDATE [ ONLY ] tabela SET coluna = expressão [, ...] [ FROM lista_de ] [ WHERE condição ] UPDATE WHERE clientes Set tipo = ‘F’ id_cliente = 1 Excluindo Dados O comando delete é utilizado para remover linhas inteiras de dados de uma tabela. O comando delete não é utilizado para remover valores de colunas especificas, um registro completo, incluindo todas as colunas é removido. A instrução delete deve ser usada com cautela, ela funciona muito bem. Para excluir um único registro ou registro selecionados de uma tabela, a instrução delete deve ser utilizada com a seguinte sintaxe: Synopsis DELETE FROM [ ONLY ] tabela [ WHERE condição ] DELETE FROM clientes Where ID_CLIENTE = 22
  • Apostila de MS SQL Server Pág.: 35 / 86 A Sintaxe SELECT O comando SELECT recupera dados de uma ou mais tabelas, é a instrução utilizada para construir consultas no banco de dados. A cláusula FROM é a cláusula obrigatória e sempre deve ser utilizada em conjunção com a instrução SELECT. Há quatro cláusulas, que são partes valiosas de uma instrução SELECT, A sintaxe mais simples para recuperar dados dentro de um banco de dados: • Consulta a dados de uma tabela SELECT FROM WHERE listas_de_colunas listas_de_tabelas condições A lista_de_colunas especifica quais colunas serão retornadas como resultado, separadas por vírgula 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. O comando SELECT pode ser utilizado para mostrar o conteúdo de variáveis, valores literais, etc... Exemplo, execute o comando: SELECT @@version Comandos Select SELECT, o camando que representa a Data Query Language (DQL) em que SQL, é a instrução utilizada para construir consultas no banco de dados. A cláusula FROM é a cláusula obrigatória e sempre deve ser utilizada em conjunção com a instrução SELECT. Há quatro cláusulas, que são partes valiosas de uma instrução SELECT: SELECT FROM WHERE ORDER BY
  • Pág.: 36 / 86 Apostila de MS SQL Server Exemplo 01: SELECT * FROM clientes Exemplo 02: SELECT id_cliente, nome, cnpj, status, tipo FROM clientes Agora adicione uma condição à mesma consulta. SELECT id_cliente, nome, cnpj, status, tipo, data FROM clientes WHERE id_cliente in (2, 3, 9) Operadores Aritméticos Permitidos Os operadores aritméticos desempenham operações matemáticas em duas expressões de um ou mais dos tipos de dados da categoria de tipo de dados numéricos. Operador Significado (Adicionar) Adição - (Subtrair) Subtração * (Multiplicar) Multiplicação / (Dividir) Divisão % (Modulo) Retorna o resto de inteiro de uma divisão. Por exemplo, 12% 5 = 2 porque o resto de 12 dividido por 5 é 2.
  • Apostila de MS SQL Server Pág.: 37 / 86 Funções de agregação Realizam cálculos em um conjunto de valores e retornam um único valor. Com exceção da função COUNT, as funções de agregação ignoram valores nulos. COUNT A função COUNT é utilizada para contar linhas ou valores de uma coluna que não tem valor null. A função COUNT quando utilizada com uma consulta retorna valor numérico. SELECT COUNT (*) FROM CLIENTES SUM É utilizada para retornar um total nos valores de uma coluna para um grupo de linhas. SELECT SUM (CREDITO) FROM CLIENTES MAX A função MAX é utilizada para retornar o valor máximo para valores de uma coluna em um grupo de linhas. SELECT MAX (CREDITO) FROM CLIENTES MIN A função MIN retorna o valor mínimo de uma coluna para um grupo de linhas. SELECT MIN (CREDITO) FROM CLIENTES AVG A função AVG retorna o valor médio não ponderado de uma coluna para um grupo de linhas. SELECT AVG (CREDITO) FROM CLIENTES
  • Pág.: 38 / 86 Apostila de MS SQL Server Duas Formas Possíveis de Select Com ALIAS (Significa segundo nome, ou apelido.) SELECT Cl.nome, Cl.credito, Pe.DataPed, Sum(It.Quantidade * It.Preco_Venda) As Total FROM Clientes Cl, Pedidos Pe, Itens It WHERE Cl.id_cliente = Pe.id_cliente AND Pe.id_pedido = It.id_pedido GROUP BY Cl.nome, Cl.credito, Pe.DataPed Ou Sem ALIAS SELECT Clientes.nome, Clientes.credito, Pedidos.DataPed, Sum(Itens.Quantidade * Itens.Preco_Venda) As Total FROM Clientes, Pedidos, Itens WHERE Itens.id_pedido Clientes.id_cliente = Pedidos.id_cliente GROUP BY Clientes.nome, Clientes.credito, Pedidos.DataPed AND Pedidos.id_pedido =
  • Apostila de MS SQL Server Pág.: 39 / 86 Operadores Lógicos São aqueles operadores que utilizam palavras-chave de SQL para fazer comparações em vez de símbolos. Os operadores lógicos abordados são: IS NULL Utilizado para comparar um valor com um valor null. No exemplo, o campo crédito não tem valor. SELECT * FROM CLIENTES WHERE CREDITO IS NULL BETWEEN É utilizado para procurar valores que estão dentro de um conjunto de valores, dado o valor mínimo e o valor máximo. No exemplo, o campo valor deve estar entre 20 e 50. SELECT * FROM CLIENTES WHERE credito BETWEEN 20 AND 50 IN É utilizado para comparar um valor com uma lista de valores literais que foi especificada. No exemplo, o campo crédito deveria ser um dos valores da lista. SELECT * FROM CLIENTES WHERE CREDITO IN (20, 30, 50) LIKE É utilizado para comparar um valor com valores semelhantes utilizando operadores curinga (%) porcentagem ou (_) sublinhado. -Exemplolo: Localiza quaisquer valores que comecem com PAB SELECT * FROM CLIENTES WHERE nome LIKE 'PAB%' -Exemplo: Localiza quaisquer valores que contenham ABL a partir da segunda casa e terminem com quaisquer valores. SELECT * FROM CLIENTES WHERE nome LIKE 'ABL%' EXISTS É utilizado para procurar a presença de uma linha em uma tabela específica que atenda a certos
  • Pág.: 40 / 86 Apostila de MS SQL Server critérios. Veja como pesquisar para ver se id_cliente 982 está na tabela clientes. SELECT * FROM CLIENTES WHERE EXISTS ( Select id_cliente From clientes Where id_cliente = 982) NOT EXISTS É utilizado para procurar a não ocorrência de uma linha em uma tabela específica que atenda a certos critérios. Veja como pesquisar para ver se existe clientes que não compraram. Logo não ocorrem na tabela pedidos. SELECT * FROM CLIENTES WHERE NOT EXISTS ( Select id_cliente From Pedidos WHERE Pedidos.id_cliente = Clientes.id_Cliente )
  • Apostila de MS SQL Server Pág.: 41 / 86 C o n c eito s b á si c o s de jun ç õe s Usando junções, é possível recuperar dados de duas ou mais tabelas com base em relações lógicas entre as tabelas. Junções indicam como Microsoft S QL Server deveriam usar dados de uma tabela para selecionar as linhas em outra tabela. Uma condição de junção define o modo como duas tabelas são relacionadas em uma consulta por: • E specificando a coluna de cada tabela a ser usada para a junção. Uma condição de junção típica especifica uma chave estrangeira de uma tabela e sua chave associada na outra tabela. • E specificando um operador lógico (por exemplo, = ou <>) a ser usado na comparação de valores das colunas. Para esse exemplo vamos adicionar uma nova tabela em nosso banco: CREATE TABLE Cidades ( ID_Cidade int CidadeNome Estado ) NOT NULL PRIMARY KEY, varchar (50) NOT NULL, char (2) NOT NULL ALTER TABLE CLIENTES Add Id_Cidade char (2) NOT NULL INNER JOINS Um INNER JOIN conecta duas ou mais tabelas segundo uma condição de junção. O INNER JOIN retorna os registros que forem encontrados nas tabelas e respeitarem as condições de busca. SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Clientes INNER JOIN Cidades ON Clientes.ID_Cidade = Cidades.ID_Cidade OUTER JOINS Como podemos reparar no INNER JOIN, somente as linhas que possuem dados nas duas colunas do relacionamento são retornadas. Caso uma das colunas não possua valor (tenha null), este registro não participará da junção do SELECT. Isto pode não uma determinada pergunta. Você pode estar querendo saber, por exemplo, quais os clientes que você tem cadastrado, e, se houver a informação, o nome da cidade destes. LEFT OUTER JOINS Neste caso, você precisa de um OUTER JOIN. Um OUTER JOIN traz todas as linhas de uma determinada tabela, tendo ou não relacionamento completo, e as linhas da segunda tabela que satisfizerem o relacionamento. Vamos construir o exemplo dito antes: SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Clientes LEFT OUTER JOIN Cidades ON Clientes.ID_Cidade = Cidades.ID_Cidade;
  • Pág.: 42 / 86 Nome Cliente1 Cliente2 Cliente3 Cliente4 Apostila de MS SQL Server CidadeNome Estado Rio de Janeiro São Paulo NULL São Paulo RJ SP NULL MG RIGHT OUTER JOINS Se quiséssemos trazer todas as cidades, e os clientes que existirem nelas, faríamos: SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Clientes RIGHT OUTER JOIN Cidades ON Clientes.ID_Cidade = Cidades.ID_Cidade Nome Cliente1 Cliente2 Cliente4 NULL CidadeNome Rio de Janeiro São Paulo São Paulo Vitória Estado RJ SP MG ES Que esteja bem claro que a palavra LEFT ou RIGHT refere-se apenas à ordem escrita das tabelas, vamos ver um outro exemplo de trazer todos os clientes e as cidades destes: SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Cidades RIGHT OUTER JOIN Clientes ON Clientes.ID_Cidade = Cidades.ID_Cidade Nome Cliente1 Cliente2 Cliente3 Cliente4 CidadeNome Rio de Janeiro São Paulo NULL São Paulo Estado RJ SP NULL MG FULL OUTER JOINS E podemos, ainda, juntar os dois modos: ou seja, fazer um LEFT e RIGHT OUTER JOIN ao mesmo tempo. Isto, na, verdade, se chama FULL OUTER JOIN. E o exemplo está a seguir: SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Cidades FULL OUTER JOIN Clientes ON Clientes.ID_Cidade = Cidades.ID_Cidade; Nome Cliente1 Cliente2 Cliente4 NULL Cliente3 CidadeNome Rio de Janeiro São Paulo São Paulo Vitória NULL Estado RJ SP MG ES NULL
  • Apostila de MS SQL Server Pág.: 43 / 86 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 podem ser acessadas (para leitura ou modificação), o que é útil no caso de controle de acesso, • Uma consulta SELECT que é usado muito frequentemente 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 usada para exportar dados para outras aplicações. Criando uma visão Vamos criar uma visão no banco de dados Aluno, usando a tabela Clientes. Essa visão vai mostrar o código, nome e histórico de clientes de pessoas jurídicas. Para criar uma visão use o comando CREATE VIEW. CREATE VIEW AS SELECT VIEWClientes Clientes.ID_Cliente, Clientes.Nome, Clientes.Historico FROM Clientes WHERE (Tipo = 'J') CREATE VIEW VIEWcase AS SELECT Clientes.Nome, Clientes.Credito, 'Avaliação'= Case When Credito Between 0 and 100 then 'Regular' When Credito Between 101 and 200 then 'Bom' Else 'Ótimo' End FROM Clientes
  • Pág.: 44 / 86 CREATE VIEW AS SELECT Apostila de MS SQL Server VIEWCube Produtos.Descricao, Pedidos.Dataped, (Itens.Quantidade) as Quantidade SUM FROM Pedidos INNER JOIN ITENS ON Pedidos.ID_Pedido = Itens.ID_Pedido INNER JOIN PRODUTOS ON Itens.ID_Produto = Produtos.ID_Produto GROUP BY Produtos.Descricao, Pedidos.Dataped WITH Cube Obs: O operador CUBE é utilizado junto com a cláusula Group By para produzir linhas adicionais de resumo. Ele produzirá linhas superagregadas utilizando cada possível combinação das colunas na cláusula Group By, produzirá médias parciais e somas parciais mas também colunas de referência cruzada para retornar linhas adicionais de resumo. CREATE VIEW AS SELECT SUM VIEWROLLUP Produtos.Descricao, Pedidos.Dataped, (Itens.Quantidade) as Quantidade FROM Pedidos INNER JOIN ITENS ON Pedidos.ID_Pedido = Itens.ID_Pedido INNER JOIN PRODUTOS ON Itens.ID_Produto = Produtos.ID_Produto GROUP BY WITH Produtos.Descricao, Pedidos.Dataped ROLLUP Obs: Assim como o operador Cube, o RollUp funciona em conjunto com a cláusula Group By, geralmente utilizado para produzir médias em execução ou somas em execução aplicando a função agregada para cada coluna que consta na cláusula Group By.
  • Apostila de MS SQL Server Pág.: 45 / 86 Stored Procedure Um procedimento armazenado [stored procedure] é 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. Eles também aumentam o desempenho de várias operações, pois são executados no servidor e pré-compilados, ao contrário de comandos SQL que devem ser interpretados no momento da execução. Para criar um procedimento, use o comando CREATE PROCEDURE. Exemplo o procedimento abaixo recebe um parâmetro (@nome) e mostra todos os clientes cujo nome contenha o nome informado: CREATE PROCEDURE ProcIncCliente ( @ID_Cliente Int, @Nome Varchar(50), @Cnpj Char(14), @Tipo Char(1), @Status Bit, @Data DateTime, @Historico Text, @Foto Image, @Credito Money) AS BEGIN INSERT Into Clientes(ID_Cliente , Nome, Cnpj, Tipo, Status, Data, Historico, Foto, Credito) Values(@ID_Cliente, @Nome, @Cnpj, @Tipo, @Status, @Data, @Historico, @Foto ,@Credito) ) END
  • Pág.: 46 / 86 Apostila de MS SQL Server CREATE PROCEDURE ProcIAltCliente ( @ID_Cliente Int, @Nome Varchar(50), @Cnpj Char(14), @Tipo Char(1), @Status Bit, @Data DateTime, @Historico Text, @Foto Image, @Credito Money ) AS BEGIN Begin Transaction Update Where Clientes Set Clientes.Nome Clientes.Cnpj Clientes.Tipo Clientes.Status Clientes.Data Clientes.Historico Clientes.Foto Clientes.Credito = = = = = = = Clientes.ID_Cliente = If @@Error = 0 Begin Commit Transaction Return (0) End Else Begin Rollback Transaction Return (1) End END @Nome, @Cnpj, @Tipo, = @Status, @Data, @Historico, @Foto, @Credito @ID_Cliente
  • Apostila de MS SQL Server Pág.: 47 / 86 CREATE PROCEDURE ProcExcCliente(@ID_Cliente Bigint) As Declare @Msg Varchar (255), @Erro Bigint BEGIN Delete From Where Clientes Clientes.ID_Cliente = @ID_Cliente set @Erro = @@Error If @Erro <> 0 BEGIN Select erro: ' @Msg = 'Operação Não Realizada devido ao seguinte + Convert (Varchar (255), @Erro) Raiserror (@Msg, 10, 1) END END CREATE PROCEDURE ProcVendaProduto ( @DataIni DateTime, @DataFim DateTime, @Valor Money) As BEGIN Select From Produtos INNER JOIN Itens On Produtos.ID_Produto = Itens.ID_Produto INNER JOIN Pedidos On Pedidos.ID_Pedido = Itens.ID_Pedido Where Group By Having Order By END Produtos.Descricao, Sum(Itens.Quantidade * Itens.Precovenda) As Total Pedidos.DataPed BetWeen @DataIni And @DataFim Produtos.Descricao Sum(Itens.Quantidade * Itens.Precovenda) > @Valor Produtos.Descricao
  • Pág.: 48 / 86 Apostila de MS SQL Server CREATE PROCEDURE ProcVendasMesAno ( @DataIni DateTime, @DataFim DateTime ) AS BEGIN Select Convert(Varchar(15), Datepart(mm,Pedidos.Dataped)) + '-' + Convert(Varchar(15),Datepart(yy,Pedidos.Dataped))AS 'Ano_Mes', Sum(Itens.Quantidade * Itens.Precovenda) AS Total From Itens INNER JOIN Pedidos On Itens.ID_Pedido = Pedidos.ID_Pedido Where Pedidos.Dataped Between @Dataini And @DataFim Group By Convert(Varchar(15),Datepart(Mm,Pedidos.Dataped))+ '-' + Convert(Varchar(15),Datepart(Yy,Pedidos.Dataped)) Order By Convert(Varchar(15),Datepart(Mm,Pedidos.Dataped))+ '-' + Convert(Varchar(15),Datepart(Yy,Pedidos.Dataped)) END CREATE PROCEDURE ProcCursor AS Declare cursorX Cursor for Select Produtos.* From Produtos Declare @ID_Produto Bigint, @descricao varchar(25), @precocompra money, @saldo Bigint BEGIN open cursorx Create Table #tempProduto ( ID_Produto Bigint, Descricao varchar(25), PrecoCompra money, Saldo Bigint ) fetch cursorx into @ID_Produto, @descricao, @precocompra, @saldo while (@@fetch_status = 0) begin if @saldo > 1 begin Insert Into #tempProduto values( @ID_Produto, @descricao, @precocompra, @saldo) end fetch cursorx into @ID_Produto, @descricao, @precocompra, @saldo end close cursorx Deallocate cursorx select * from #tempProduto end
  • Apostila de MS SQL Server Pág.: 49 / 86 CREATE PROCEDURE ProcCursorTabTemp AS Declare cursorX Cursor for Select Clientes.Nome, Sum(Itens.Quantidade * Itens.PrecoVenda) as Total From Clientes INNER JOIN Pedidos On Pedidos.ID_Cliente = Clientes.ID_Cliente INNER JOIN Itens On Itens.ID_Pedido = Pedidos.ID_Pedido Group By Clientes.Nome Declare @nome varchar(35), @total Money BEGIN open cursorx Create money) Table #tempPedidosCliente(Nome varchar(35), Total fetch cursorx into @nome, @total While (@@fetch_status = 0) begin if @total > 1 begin Insert Into #tempPedidosCliente Values(@nome, @total) end fetch cursorx into @nome, @total end close cursorx Deallocate cursorx Select * From #tempPedidosCliente END
  • Pág.: 50 / 86 Apostila de MS SQL Server 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 e DELETE numa tabela. Geralmente gatilhos são utilizados para reforçar restrições de integridade que não podem ser tratadas pelos recursos mais simples, como regras, restrições, a opção NOT NULL etc. Um gatilho também pode ser usado para calcular e armazenar valores automaticamente em outra tabela. Vamos criar um gatilho, chamado ValidaCredito, que será ativado por uma operação INSERT na tabela dbo.clientes. CREATE TRIGGER ValidaCredito ON Clientes FOR Insert AS Declare @ValorCredito money, @IDCliente int BEGIN Select @ValorCredito = Inserted.Credito, @IDCliente = Inserted.ID_Cliente From Inserted If @ValorCredito > 10000 Update Clientes set Clientes.Credito = 10000 Where Clientes.ID_Cliente = @IDCliente END CREATE TRIGGER AtualizaSaldoInc ON Itens FOR INSERT AS DECLARE @QTD INT, @COD INT, @SALDO INT, @NRO INT, @Descricao varchar(255), @msg varchar(255) BEGIN SELECT @QTD = INSERTED.QUANTIDADE, @COD = INSERTED.ID_PRODUTO, @NRO = INSERTED.ID_PEDIDO FROM INSERTED SELECT @SALDO = PRODUTOS.SALDO, @DESCRICAO = PRODUTOS.DESCRICAO FROM PRODUTOS WHERE PRODUTOS.ID_PRODUTO = @COD IF @SALDO >= @QTD UPDATE PRODUTOS SET PRODUTOS.SALDO = PRODUTOS.SALDO - @QTD WHERE PRODUTOS.ID_PRODUTO = @COD ELSE BEGIN SELECT @MSG = 'INI Não aceito, pois saldo do produto ' + @descricao + ' é: ' + Convert (Varchar(255), @saldo) + ' não atendendo a necessidade. FIM' Raiserror (@msg, 14, 1) Rollback END END
  • Apostila de MS SQL Server Pág.: 51 / 86 CREATE TRIGGER AtualizaSaldoExc ON Itens FOR DELETE AS DECLARE @Qtd INT, @Cod INT BEGIN SELECT @Qtd = Deleted.Quantidade, @Cod = Deleted.ID_Produto FROM DELETED UPDATE Produtos SET Saldo = Saldo + @Qtd WHERE ID_PRODUTO = @Cod END CREATE TRIGGER AtualizaSaldoAlt ON ITENS FOR UPDATE DECLARE @QTDNovo INT, @CODNovo INT, @QTDAnterior INT, @CODAnterior INT, @SALDO INT, @Descricao varchar(25), @Msg varchar(255) BEGIN SELECT @QTDNovo = INSERTED.QUANTIDADE, @CODNovo = INSERTED.ID_PRODUTO FROM INSERTED SELECT FROM UPDATE WHERE SELECT FROM WHERE IF UPDATE AS @QTDAnterior = DELETED.QUANTIDADE, @CODAnterior = DELETED.ID_PRODUTO DELETED PRODUTOS SET PRODUTOS.SALDO PRODUTOS.ID_PRODUTO = PRODUTOS.SALDO + @QTDAnterior = @CODAnterior @SALDO = PRODUTOS.SALDO, @DESCRICAO=PRODUTOS.DESCRICAO PRODUTOS PRODUTOS.ID_PRODUTO = @CODNovo @SALDO >= @QTDNovo PRODUTOS SET PRODUTOS.SALDO = PRODUTOS.SALDO - @QTDNovo PRODUTOS.ID_PRODUTO = @CODNovo WHERE ELSE BEGIN SELECT @MSG = 'INI Não aceito, pois saldo do produto ' + @Descricao + ' é: ' + Convert (Varchar(255), @saldo) + ' não atendendo a necessidade. FIM' Raiserror (@Msg, 14, 1) Rollback END END
  • Pág.: 52 / 86 Apostila de MS SQL Server Controle de Transação Controlando Transação Simples Begin Begin Transaction Insert Into Produtos(Id_produto, Descricao, PrecoCompra) Values(Id_produto 'Novo Produto', 1200, 12.78) Insert Into Produtos(Id_produto, Descricao, PrecoCompra) Values(Id_produto 'Novo Produto', 400, 23.78) If @@Error = 0 Begin Print 'Registro inserido com sucesso.' Commit Transaction End Else Begin Print 'Registro não incluído.' Rollback Transaction End End Saldo, Saldo, Controlando Transações com Savepoints (Circunstancial) Begin Begin Tran Save Tran Trans1 Insert Into Produtos(Id_produto, Descricao, PrecoCompra) Values(Id_produto 'Novo Produto', 1200, 12.78) If @@Error <> 0 Begin Print 'Produto não incluído.' Rollback Tran Trans1 End Save Tran Trans2 Insert Into Produtos(Id_produto, Descricao, PrecoCompra) Values(Id_produto 'Novo Produto', 1200, 12.78) If @@Error <> 0 Begin Print 'Produto não incluído.' Rollback Tran Trans2 End Commit Tran End Outros Objetos Saldo, Saldo,
  • Apostila de MS SQL Server Pág.: 53 / 86 CREATE DEFAULT (Transact-SQL) Cria um objeto chamado padrão. Quando associado a uma coluna ou um tipo de dados de alias, um padrão especifica um valor a ser inserido na coluna á qual o objeto está associado (ou em todas as colunas, no caso de um tipo de dados de alias), quando nenhum valor é fornecido explicitamente durante uma inserção. I m p ort ante Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez dela, use definições padrão criadas com a palavra-chave DEFAULT de ALTER TABLE ou CREATE TABLE. CREATE DEFAULT DefautGetData as GetData() CREATE DEFAULT DefautISigla as 'RJ' CREATE Rule (Transact-SQL) Cria um objeto chamado regra. Quando associada a uma coluna ou a um tipo de dados de alias, a regra especifica os valores aceitáveis que podem ser inseridos naquela coluna. CREATE RULE Sigla CREATE RULE Sigla2 CREATE RULE Faixa as @Valor as @Valor as @Valor = in >= 1 'RJ' / 'ES' / 'MG' ('RJ', 'ES', 'MG' ) and @Valor <= 1000 I m p ort ante Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Recomenda-se o uso de restrições de verificação. As restrições de verificação são criadas pelo uso da palavra-chave CHECK de CREATE TABLE ou ALTER TABLE.
  • Pág.: 54 / 86 Apostila de MS SQL Server Criando Login No SQL SERVER Login é um conjunto de caracteres composto de LoginName, password database default, default language e UserName solicitado para os usuários que por algum motivo necessitam acessar algum sistema de banco de dados. Geralmente os sistemas computacionais solicitam um login e uma senha para a liberação do acesso. Para adicionar um usuário ao banco de dados do SQL Server você tem que seguir três passos: Primeiro: você deve criar um login, que é um "cara" que tem permisssão de se logar no SQL Sever CREATE LOGIN ALUNO_NOME WITH PASSWORD = '123'; Segundo: você deve criar um usuário para o banco de dados que deseja mapeando esse usuário para o login criado, assim seu usuário conseguirá se logar no SQL Server e entrar no banco de dados desejado. CREATE USER ALUNO_NOME FROM LOGIN ALUNO_NOME; Terceiro: você deve dar ou remover permissões ao usuário porque até o segundo passo o usuário criado só tem direito a entrar no banco de dados, dando as permissões o usuário já pode operar no banco de dados. Se o usuário for comum você pode adicioná-lo apenas as roles de db_reader e db_writer, que permitirá que o usuário faça select, insert, delete e update em todas as tabelas do referido banco de dados. EXEC SP_ADDROLEMEMBER 'DB_DATAREADER', 'ALUNO_NOME' EXEC SP_ADDROLEMEMBER 'DB_DATAWRITER', 'ALUNO_NOME' Obs.: Se quiser ver melhor isso na parte gráfica, pode consultar dentro do "Object Explorer" a guia "Security", dentro dela clique em "Login", botão direito em "sa", "Properties", escolha a guia "User Mapping". Aqui você verá as roles do SQL Server pra cada usuário. Caso queira saber o que dá direito a cada role procure no SQL Server Books Online.
  • Apostila de MS SQL Server Pág.: 55 / 86 Usando comandos DDL CREATE LOGIN WITH PASSWORD DEFAULT_DATABASE DEFAULT_LANGUAGE = = = Digidata_Login '123', digidata, Português Usando system procedure SP_AddLogin 'Digidata_Login',' 123','digidata' Como criar um logon do SQL ServerSQL Server 2008 R2 Outras versões SQL Server 2008 A maioria os usuários do Windows precisa de um logon SQL Server para se conectar a SQL Server. Este tópico mostra como criar um logon do SQL Server. Para criar um logon do SQL Server que usa Autenticação do SQL Server (SQL Server Management Studio) 1.No SQL Server Management Studio, abra o Pesquisador de Objetos e expanda a pasta da instância de servidor onde criar o novo logon. 2.Clique com o botão direito na pasta “Security” (Segurança), aponte para “New” (Novo) e clique em “Login” (Logon). 3.Na página “Geral”, insira o nome de um usuário do Windows na caixa Nome de logon . 4.Selecione “SQL Server authentication”, Obs.: determine o Banco a onde será criado e a Linguagem. 5.Insira uma senha para o logon. 6.Selecione as opções de diretiva de senha que devem ser aplicadas ao novo logon. Em geral, a diretiva de imposição de senha é a opção mais segura. 7.Clique em “OK”.
  • Pág.: 56 / 86 Apostila de MS SQL Server Criando Login com Wizard Escolha do nome de Login, senha, banco de dados padrão e linguagem
  • Apostila de MS SQL Server Escolha do BD default, UserName e Papeis de Sistema Criando Usuário Usando comandos DDL CREATE USER Digidata_User FOR LOGIN Digidata_Login Usando system procedure SP_AddUser ' Digidata_Login',' Digidata_User' Pág.: 57 / 86
  • Pág.: 58 / 86 Apostila de MS SQL Server Como criar um usuário de banco de dados SQL Server Este tópico mostra como criar um usuário de banco de dados mapeado para um logon do SQL Server. Assume-se que já exista um logon correspondente do SQL Server. Criar um usuário de banco de dados usando o SQL Server Management Studio 1.No SQL Server Management Studio, abra o Pesquisador de Objetos e expanda a pasta Bancos de Dados. 2.Expanda o banco de dados no qual o novo usuário de banco de dados será criado. 3.Clique com o botão direito do mouse na pasta “ Security” Segurança, aponte para “new” Novo e clique em “User” Usuário. 4.Na página Geral, insira um nome para o novo usuário na caixa Nome de Usuário. 5.Na caixa Nome de Logon, digite o nome de um logon do SQL Server para mapear para o usuário de banco de dados. 6.Clique em OK. Obs.: Para Criar um usuário de banco de dados certifique que esteja conectado ao mesmo.
  • Apostila de MS SQL Server Criando Usuário com Wizard Escolha do Login, Nome do Usuário Pág.: 59 / 86
  • Pág.: 60 / 86 Apostila de MS SQL Server Escolha dos Objetos de BD e permissões Concedendo Permissões aos Usuários Para conceder ou revogar permissões a um usuário, é mais fácil usar: GRANT ALL TO Digidata_User REVOKE ALL FROM Digidata_User GRANT create table TO Digidata_User REVOKE create table FROM Digidata_User GRANT select ON clientes TO Digidata_User REVOKE select ON clientes TO Digidata_User
  • Apostila de MS SQL Server Pág.: 61 / 86 Criando Role (Funções) As funções são protegíveis no nível de banco de dados. Depois de criar uma função, configure as permissões no nível de banco de dados da função usando GRANT, DENY e REVOKE. Para adicionar membros a uma função de banco de dados, use o procedimento armazenado sp_addrolemember. Usando comandos DDL CREATE ROLE Digidata_Role AUTHORIZATION Digidata_User Usando system procedure SP_Addrole Digidata_Role Adicionando o User a Role EXEC SP_Addrolemember Digidata_Role, Digidata_User Adicionando privilégios a Role GRANT SELECT ON Clientes TO Digidata_Role GRANT CREATE TABLE TO Digidata_Role DENY CREATE TABLE TO Digidata_Role
  • Pág.: 62 / 86 Apostila de MS SQL Server Criando Role com Wizard Escolha do RoleName, Selecionando os objetos e permissões 1/3
  • Apostila de MS SQL Server Selecionando os objetos e permissões 2/3 Selecionando os objetos e permissões 3/3 Pág.: 63 / 86
  • Pág.: 64 / 86 Apostila de MS SQL Server
  • Apostila de MS SQL Server Pág.: 65 / 86 Criando BackUp e Restore Fazer um backup consiste em copiar o banco de dados para um local seguro. Uma cópia de backup deve ser feita na medida do possível em outra máquina da rede, para uma fita magnética ou outro meio magnético. O backup copia tudo o que esta dentro do banco de dados, incluindo o log de transação. O log de transação é um registro serial de todas as modificações feitas no banco de dados. Esse log é usado no processo de restauração para fazer todas as alterações que ocorrem no banco de dados desde o ultimo backup. A restauração do banco de dados, quando bem sucedida, retorna o banco ao estado em que estava no momento da execução do backup. Se durante a execução de backup alguam transação não tiver sido concluída,ela será desfeita para garantir a consistência da base de dados. O SQL Server 2005 permite a confecção de dois tipos de backup: o backup completo e o diferencial. O backup completo, como o nome diz, é uma fotografia exata de todo o banco de dados. O backup diferencial é uma cópia das alterações feitas no banco de dados, desde a realização do ultimo backup completo.
  • Pág.: 66 / 86 Apostila de MS SQL Server Criando backup completo Criando backup diferencial
  • Apostila de MS SQL Server Efetuando o Restore full e diferencial Efetuando um Restore pontual Pág.: 67 / 86
  • Pág.: 68 / 86 Apostila de MS SQL Server Anexo - 1 Registrar Servidores Arquitetura Distribuída do SQL Server O SQL Server utiliza uma arquitetura na qual vários servidores distribuídos podem ser acessados a partir de um único servidor. Para que isto seja possível, estes servidores devem ser configurados como Linked Servers. Para executarmos esta atividade, você deve criar na sua máquina um linked server apontando para o a máquina de um colega (sugestão: caso queira executar a atividade em uma mesma máquina, faça uma segunda instalação do SQL Server, dando à nova instância que será criada um nome diferente do padrão 'SQLEXPRESS'). A configuração de um Linked Server pode ser feita usando a stored procedure sp_addlinkedserver ou através do SQL Server Management Studio Express, selecionando a opção de menu 'New Linked Server':
  • Apostila de MS SQL Server Pág.: 69 / 86 A janela de diálogo 'New Linked Server' será exibida. Na página 'General' defina o nome e o tipo do servidor. Na página 'Security' defina mapeamentos de usuários entre os servidores local e remoto, caso necessário; e defina como proceder para logins que não foram mapeados (sugestão: use a opção 'Be made using the login´s current security context').
  • Pág.: 70 / 86 Apostila de MS SQL Server Para acessar dados no servidor remoto, devemos referenciar o nome do servidor, o banco de dados, o esquema e o nome da tabela. Uma seleção na relação 'Rel' do banco de dados 'BD' do servidor 'SERVER SQLEXPRESS' teria a seguinte sintaxe em SQL: select * from [NomeServidorSQLEXPRESS].NomeBanco.Esquema.NomeTabela -Como exemplo poderíamos considerar: select * from [Servidor01SQLEXPRESS].BancoCurso.dbo.Clientes
  • Apostila de MS SQL Server Pág.: 71 / 86 Anexo – 2 Conhecendo o SQL Server 2005 Express Edition Antes de mais nada, vamos esclarecer uma coisa. O SQL Server 2005 Express Edition (SQL Server Express) não é o SQL Server 2005 propriamente dito. O SQL Server Express é uma plataforma de banco de dados baseada nas tecnologias do SQL Server 2005 e chega para substituir o MSDE 2000. Ele é um produto gratuito e possui características de rede e segurança que o diferenciam das demais edições do SQL Server 2005. Neste artigo pretendo fazer uma introdução básica sobre o SQL Server Express 2005, falando sobre suas principais características e fazendo uma comparação com o atual MSDE 2000. Esta edição do SQL Server Express tem como grande promessa uma superior facilidade de utilização com um processo de instalação simples e robusto e com uma ferramenta gráfica (SQL Express Manager), que permitirá realizar a adminsitração do servidor de uma forma simples e prática. Esta ferramenta gráfica ainda esta em desenvolvimento e será disponibilizada como um download gratuíto no site da Microsoft. O SQL Server Express foi desenvolvido tendo em mente duas utilizações básicas: A primeira, como um servidor de produtos, especialmente como um Web Server ou Database Server. O segundo, como um cliente stand-alone, onde a aplicação não precise depender de uma rede para obter acesso aos dados. O Engine (Motor) O SQL Server Express usa o mesmo engine que as demais edições do SQL Server 2005, mas por ser uma edição digamos, light, possui algumas limitações. O engine suporta 1CPU, 1GB RAM e banco de dados com até 4GB. Uma mudança significativa em relação ao MSDE 2000 é que o engine do SQL Express não possui a limitação de usuários concorrentes, conhecida como “Concurrent Workload Governor” onde a performance do MSDE 2000 é extremamente prejudicada na medida em que as conexões concorrentes de usuários aumentam. Para saber mais sobre esta limitação do MSDE 2000, clique aqui. O SQL Server Express até pode ser instalado em máquinas multiprocessadas mas somente 1 CPU será reconhecida pelo engine. Como consequência, características como execução de consultas em paralelo não é suportado pelo SQL Server Express. O limite de 1GB RAM é apenas para o buffer pool. O buffer pool é usado para o armazenamento de páginas de dados e outras informações. A memória necessária para o gerenciamento de conexões, locks e outros não estão incluídos neste limite de 1GB. Sendo assim, o SQL Express pode ser instalado normalmente em máquinas com mais de 1GB, mas ele nunca usará mais que 1GB para o buffer pool. AWE ou /3GB não é suportado. O limite de 4GB para o banco de dados é aplicado apenas para o arquivo de dados. Entretanto, não existe limite para o número de banco de dados que você pode colocar no servidor. O SQL Server Express suporta instalação side-by-side com outras versões do SQL Server, podendo coexistir na mesma máquina junto com instalações do SQL Server 2000, SQL Server 2005 ou MSDE 2000. Suporta um número máximo de 50 instâncias na mesma máquina desde que cada instância seja unicamente identifica, ou seja, você pode realizar até 50 instalações do SQL Express desde que cada instância tenha um nome diferente. Por padrão o SQL Server Express é instalado com uma named instance chamada SQLEXPRESS.
  • Pág.: 72 / 86 Apostila de MS SQL Server Ferramentas Diferente do MSDE 2000 que não possui ferramenta gráfica, o SQL Server Express possuirá uma ferramenta gráfica chamada SQL Server Management Studio Express (SSMSE). Esta, ainda em fase de desenvolvimento, mas já disponível para download público, será uma versão ligth do atual SQL Server Management Studio disponível nas demais edições do SQL Server 2005 e permitirá uma fácil administração dos bancos de dados. O SSMSE suportará conexões para SQL Server Express e outras edições do SQL Server 2005, SQL Server 2000 e MSDE 2000. Uma janela de conexão guiará o usuário através da seleção de uma instância e o método de autenticação a ser utilizado, suportando conexões locais ou remotas. Diversas funcionalidades de gerenciamento de banco de dados estarão disponíveis através do menu de contexto (botão direito) e wizards. Entre elas podemos citar, criar e modificar banco de dados, tabelas, usuários e logins. O Query Editor do SSMSE também permitirá o desenvolvimento e execução de instruções T-SQL e scripts.
  • Apostila de MS SQL Server Pág.: 73 / 86 Funcionalidades O SQL Server Express suporta a maioria das funcionalidades do SQL Server 2005. A tabela abaixo mostra algumas características e componentes suportados: Stored Procedures SQL Computer Manager Views Replication (as a subscriber only) Triggers Advanced Query Optimizer Cursors SMO / RMO Sqlcmd and osql utilities Integration with Visual Studio 2005 Snapshot Isolation Levels Service Broker (as a client only) Native XML support, including XQuery and XML Schemas SQL CLR T-SQL language support Multiple Active Result Sets (MARS) Tabela 01 A tabela abaixo destaca os principais componentes do SQL Server 2005 que não são suportados nesta versão do SQL Express Edition: - Reporting Services Notification Services Analysis Services SQL Agent Full text search DTS OLAP Services / Data Mining English Query
  • Pág.: 74 / 86 Apostila de MS SQL Server SQL Server Management Studio Express (SSMSE). O Microsoft SQL Server 2008 Management Studio Express (SSMSE) é um ambiente de desenvolvimento integrado gratuito para acessar, configurar, gerenciar e desenvolver todos os componentes do SQL Server. O SQL Server 2008 Management Studio Express combina um amplo grupo de ferramentas gráficas com editores de scripts sofisticados que fornecem acesso ao SQL Server a desenvolvedores e administradores de todos os níveis de experiência. Desenvolvedores terão uma experiência familiar e os administradores de banco de dados terão um único utilitário abrangente que combina ferramentas gráficas fáceis de usar com sofisticadas capacidades de script. Figura 01
  • Apostila de MS SQL Server Pág.: 75 / 86 Anexo - 3 Suporte a Rede Embora o usuário possa habilitar o suporte a protocolos como TCP/IP e Named Pipes , por padrão o SQL Server Express é instalado apenas com suporte a shared memory. Isto faz com que por default o SQL Server Express funcione apenas localmente na máquina onde foi instalado e não suporte conexões de clientes em uma rede. Para suportar conexões de clientes remotos, é necessário habilitar o suporte a rede no SQL Server Express. Para habilitar o suporte a rede, você tem as seguintes opções: -Usar o SQL Server Configuration Manager para habilitar os protocolos necessários (normalmente TCP/IP) e iniciar o serviço SQL Server Browser. A figura abaixo mostra o uso do SQL Server Configuration Manager para habilitar protocolos de rede. Você pode acessar a funcionalidade descrita acima, clicando em Iniciar / Programas / Microsoft SQL Server 2005 / Configuration Tools / SQL Server Configuration Manager no menu suspenso do seu Windows. Figura 02 O SQL Browser é um novo serviço do SQL Server 2005 que identifica as portas que as named instances estão usando. Este serviço vem desativado por default e deve ser ativado para que a comunicação entre um cliente remoto e um servidor SQL Server Express funcione corretamente. Complementando a configuração necessária, observe a Figura 03, onde a propriedade Enabled é habilitada (Yes). Observe ainda a Figura 04 onde as propriedades Active e Enabled também devem estar habilitadas (Yes).
  • Pág.: 76 / 86 Figura 03 Figura 04 Apostila de MS SQL Server
  • Apostila de MS SQL Server Pág.: 77 / 86 Anexo – 4 Acessando o utilitário Microsoft SQL Server Management Studio Express Por último, acessando o utilitário Microsoft SQL Server Management Studio Express, clique no nó Logins escolhendo em seguida o login SA (naturalmente com o botão direito do mouse) acessando Propriedades no menu suspenso. A Figura abaixo será exibida, devendo ser observado em Login name a opção SQL Server Authentication. Defina um valor para password e pronto. Figura 05
  • Pág.: 78 / 86 Apostila de MS SQL Server Anexo – 5 Exercícios Extras Variações do Comando Select Subqueries (Exists, Not Exists, In e Not In) Select Clientes.Nome From Clientes Where Exists (Select * From Pedidos Where Clientes.ID_Cliente = Pedidos.ID_Cliente) Select Clientes.Nome From Clientes Where Not Exists (Select * From Pedidos Where Clientes.ID_Cliente = Pedidos.ID_Cliente) Select Produtos.Descricao From Produtos Where Produtos.ID_Produto In (Select Itens.ID_Produto From Itens Where Itens.Quantidade > 100 ) Select Produtos.Descricao From Produtos Where Produtos.ID_Produto Not In (Select Itens.ID_Produto From Itens Where Itens.Quantidade > 100 ) Obtendo Dados pela União de Tabelas ou Views (Union) Select Clientes.Nome, Clientes.Cnpj From Clientes Union Select Fornecedores.Nome, Fornecedores.Cnpj From Fornecedores Obtendo Melhor Performance com o Operador Like Select Clientes.Nome From Clientes Where Clientes.Nome Like 'Mar%' Pode alcançar melhor performance se substituida por: Select Clientes.Nome From Clientes Where Clientes.Nome >= 'Mar' And Clientes.Nome Like 'Mar%'
  • Apostila de MS SQL Server Pág.: 79 / 86 Criar as seguintes tabelas e Índices Associado Create Table Associado( Id Int Nome Varchar(50) Cidade Varchar(25) Estado Char(2) Data DateTime) Not Null, Not Null, Not Null, Not Null, Especialidade Create Table Especialidade( Id Int Descricao Varchar(25) Not Null, Not Null) Associado_Especialidade Create Table Associado_Especialidade( Id Int Not Null, AssociadoID Int Not Null, EspecialidadeID Int Not Null) Nota 1: Entidades Associado e Especialidade referem-se as tabelas que identificam os agentes do projeto. Já Associado_Especialidade, armazena os relacionamentos possíveis entre associados e especialidades. Nota 2: Quanto a chave primária, para Associado e Especialidade, os respectivos campos iniciados com Id compõem a chave primária; e para a tabela Associado_Especialidade, que numa visão clássica, as duas colunas, a saber, AssociadoID e EspecialidadeID iriam compor a chave primária. Mas numa visão mais atualizada, cada entidade deve ter um atributo que defina sua chave primária, logo o campo ID é inserido neste contexto para servir de chave primária para esta entidade. Nota 3: Finalizando a estrutura, observa-se que as colunas AssociadoID e EspecialidadeID da tabela Associado_ Especialidade, são individualmente chave estrangeira, respectivamente com referência as tabelas Associado e Especialidade. Nota 4: Adicionar 4 registros a tabela Associado, 4 registros a tabela Especialidade e pelo menos 8 registros na tabela Associado_Especialidade. Nota 5: Criar índices para os campos nome, cidade e estado da tabela Associado e índice para o campo descricao da tabela Especialidade.
  • Pág.: 80 / 86 Apostila de MS SQL Server Obs.: Usar a seguinte nomenclatura: Idx_campo_tabela CREATE INDEX idx_Nome_Associado ON Associado(Nome) CREATE INDEX idx_Cidade_Associado ON Associado(Cidade) CREATE INDEX[idx_Estado_Associado ON Associado(Estado) CREATE INDEX idx_Descricao_Especialidade ON Especialidade(Descricao) Criar as Seguintes Views -View que retorne a quantidade de cadastros de Associados por mês Select From Group by Convert(Varchar(15), Datepart(mm,A.Data)) + '-' + Convert(Varchar(15), Datepart(yy,A.Data)) AS 'Mes-Ano', Count(A.nome) As Qtd Associado A Convert(Varchar(15), Datepart(mm,A.Data)) + '-' + Convert(Varchar(15), Datepart(yy,A.Data)) -View que retorne quantas especialidades tem cada associado, com mais de uma especialidade. Select A.Nome, Count(AESP.Id_Associado) As Qtd From Associado A INNER JOIN Associado_Especialidade AESP On A.Id_Associado = AESP.AssociadoID Group by A.Nome Having Count(AESP.AssociadoID) > 1
  • Apostila de MS SQL Server Pág.: 81 / 86 Criar as Seguintes Procedures -Criar uma procedure para a inclusão de associados, possibilitando alteração e exclusão. Também implementar tratamento de erros (exception) e controle de Transação. Create procedure @Id @cidade @data ) As Proc_Manut_Associados( Int, @nome Varchar(25), @estado DateTime, @operacao Varchar(50), Char(2), Char(1) Declare @Msg Varchar(255), @Erro int BEGIN If @operacao = 'I' Begin Insert Into Associado(Id, nome, cidade, estado, data) Values(@Id, @nome, @cidade, @estado, @data) set @Erro = @@Error If @Erro <> 0 Begin Select @Msg = 'Operação não realizada devido ao seguinte erro: ' + Convert(Varchar(255),@Erro) Raiserror(@Msg,10,1) End End Else If @operacao = 'A' Begin Update Where Associado Set Associado.Nome = @nome, Associados.Cidade = @cidade, Associado.Estado = @estado, Associados.Data = @data, Associado.Id = @id set @Erro = @@Error If @erro <> 0 Begin End Else Begin End Select @Msg = 'Operação não realizada devido ao seguinte erro: ' + Convert(Varchar(255),@Erro) Raiserror(@Msg,10,1) Delete Associado Where Associado.Id = @id set @Erro = @@Error If @erro <> 0 Begin End End End Select @Msg = 'Operação não realizada devido ao seguinte erro: ' + Convert(Varchar(255),@Erro) Raiserror(@Msg,10,1)
  • Pág.: 82 / 86 Apostila de MS SQL Server -Criar uma Procedure que retorna a quantidade de associados que tenham especialidades por estado. Esta Procedure deverá prover um parâmetro para escolha do estado. CREATE Procedure Begin Select From On Where End Proc_QtdeAssociados_Estado(@estado char(2)) As Count(Associado.Id) Associado INNER JOIN Associado_Especialidade Associado.Id = Associado_Especialidade.AssociadoID Associado.estado = @estado
  • Apostila de MS SQL Server Pág.: 83 / 86 Criar as Seguintes Triggers -Criar Trigger que dispare uma exceção, quando da inclusão ou alteração na tabela especialidades, provocar um conteúdo para o campo descrição com menos de três caracteres. CREATE TRIGGER Trig_Valida_Descricao ON Especialidade FOR INSERT, UPDATE AS Declare @Tam int Begin Select @Tam = Convert(int , DataLength ( Inserted.Descricao)) From Inserted If @Tam < 3 Begin Raiserror ('Erro' ,10,1) Rollback End End -Criar uma Trigger que limite o total de especialistas de uma especialidade(Descricao) em no máximo 4 (quatro), por Estado. Create Trigger Trig_Controla_Limite_Especialistas on Associado_Especialidade For Insert, Update AS Declare @total Numeric, @estado Char(2) Begin Select @estado = Associado.Estado From Associados , Inserted Where Associado.Id = Inserted.Id Select From INNER JOIN On INNER JOIN On Where @total = Count(Associado.Estado) Associado Associado_Especialidade Associados.Id = Associado_Especialidade.AssociadoID Inserted Associado_Especialidade. EspecialidadeID = Inserted.EspecialidadeID Associado.Estado = @estado If @total > 4 Begin Raiserror('Minha Mensagem.....',10,1) End End
  • Pág.: 84 / 86 Apostila de MS SQL Server Anexo – 6 Tabelas Particionadas Tabela Particionada? O que é isso? A maneira mais simples de entender este conceito é através de um exemplo. Imagine que você tenha que armazenar em uma tabela todas as notas fiscais emitidas por uma cadeia nacional de “fast food” em suas centenas de lojas pelo Brasil. A tabela deve ficar grande, não? Agora imagine o trabalho que as operações do dia-a-dia realizam nesta tabela. Não só Inserções, Consultas e Alterações, mas também operações de Backup, Ordenação, Desfragmentação… Agora pense na seguinte solução: Armazenar as notas fiscais referentes a cada mês em uma partição desta tabela. Algo como ter um caderninho para controle de cada mês. Não fica bem mais fácil? Na maior parte do tempo, você só manipulará os dados do mês atual. Você pode até manter a partição do mês atual como “read-write” e as outras como “read-only”. Talvez você não precise de backups diários das partições relativas a meses anteriores, o que reduzirá drasticamente a janela de backup! Ilustração de Tabela Particionada Aumentando o Desempenho com múltiplos discos Agora uma afirmação que pode causar espanto. Pode ser intuitivo pensar que é vantajoso, do ponto de vista de desempenho, colocar cada partição em um disco físico separado, não é mesmo?. A princípio, temos a impressão que estaremos utilizando todos os discos ao mesmo tempo, o que melhora o desempenho. Pois não é bem assim... Apesar dos ganhos de desempenho serem claros nas operações que acabamos de discutir em tabelas particionadas, o SQL Server executa operações de ordenação em uma partição de cada vez. Em outras palavras: somente um disco seria utilizado por vez, o que reduziria o desempenho... A maneira mais eficiente de utilizar múltiplos discos é configurando volumes distribuídos em vários discos, em estruturas RAID. Desta forma, mesmo quando uma operação de ordenação é realizada numa única partição, todos os discos da estrutura RAID são utilizados em paralelo. Interessante, não? :) Próximos Passos… Obs.: No SQLEXPRESS, Não permite criação de particionamento.
  • Apostila de MS SQL Server Pág.: 85 / 86 1. Criar a seguinte Tabela: CREATE TABLE LANCAMENTO_CONTABIL ( ID_LANCAMENTO_CONTABIL BIGINT NOT NULL, DATA_LANCAMENTO DATETIME, DATA_FATO DATETIME, ID_CONTA_CONTABIL INT, VALOR MONEY ) 2. Criar a função de particionamento com DataType DATETIME como parâmetro CREATE PARTITION FUNCTION PF_Tabela_Lancamento_Contabil(DATETIME) AS RANGE RIGHT FOR VALUES ( '2006-07-01', '2006-10-01', '2007-01-01', '2007-04-01') Obs.: Surgirar a seguinte Msg: ”Msg 7736, Level 16, State 1, Line 3 Partition function can only be created in Enterprise edition of SQL Server. Only Enterprise edition of SQL Server supports partitioning.” 3. Adicionar 10 FILEGROUPS ao Banco de Dados ALTER DATABASE DBA ADD FILEGROUP FG_TAB_LancContab_QBASE ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q1 ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q2 ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q3
  • Pág.: 86 / 86 Apostila de MS SQL Server 4. Implementar a Partition Scheme PS_Tabela_Lancamento_Contabil, com a Partition Function PF_Tabela_Lancamento_Contabil como parâmetro CREATE PARTITION SCHEME PS_TabelaXPTOQuarterly AS PARTITION PFTabelaXPTOQuarterly TO ( FG_TAB_LancContab_QBASE FG_TABLancContab _Q1, FG_TABLancContab _Q2, FG_TABLancContab _Q3 ) • Nesta situação, o primeiro FG tem todos os dados desde Abril 2006 até Julho 2006. • Os seguintes FG’s tem a data que correspondente ao valor de cada partition. • O último FG tem todos os dados com data superior a Abril 2008.