SQL Server 2005 para Desenvolvedores Robin Dewson Rio de Janeiro . 2006 SQL Server 2005 para Desenvolvedores Do original Beginning SQL Server 2005 for Developers Copyright © 2006 da Editora Alta Books Ltda. Authorized translation from English language edition, entitled Beginning SQL Server 2005 for Developers, by Robin Dewson, published by Apress L.P. Copyright © 2006 by Apress L.P. PORTUGUESE language edition published by Editora Alta Books, Copyright © 2006 by Editora Alta Books. Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrônico, mecânico, fotográfico, gravação ou quaisquer outros. Todo o esforço foi feito para fornecer a mais completa e adequada informação, contudo a editora e o(s) autor(es) não assumem responsabilidade pelos resultados e usos da informação fornecida. Recomendamos aos leitores testar a informação, bem como tomar todos os cuidados necessários (como o backup), antes da efetiva utilização. Este livro não contém CD-ROM, disquete ou qualquer outra mídia. Erratas e atualizações: Sempre nos esforçamos para entregar a você, leitor, um livro livre de erros técnicos ou de conteúdo; porém, nem sempre isso é conseguido, seja por motivo de alteração de software, interpretação ou mesmo quando alguns deslizes constam na versão original de alguns livros que traduzimos. Sendo assim, criamos em nosso site, www.altabooks.com.br, a seção Erratas, onde relataremos, com a devida correção, qualquer erro encontrado em nossos livros. Avisos e Renúncia de Direitos: Este livro é vendido como está, sem garantia de qualquer tipo, seja expressa ou implícita. Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou comercial são de responsabilidade de seus proprietários. A Editora informa não estar associada a nenhum produto e/ou fornecedor apresentado no livro. No decorrer da obra, imagens, nomes de produtos e fabricantes podem ter sido utilizados, e desde já a Editora informa que o uso é apenas ilustrativo e/ou educativo, não visando ao lucro, favorecimento ou desmerecimento do produto/fabricante. Produção Editorial: Editora Alta Books Coordenação Editorial: Fernanda Silveira Tradução: Betina Macêdo Revisão: Carolina Menegassi Diagramação: Parêntese Design Editorial (www.parentese.com.br) Impresso no Brasil O código de propriedade intelectual de 1º de Julho de 1992 proíbe expressamente o uso coletivo sem autorização dos detentores do direito autoral da obra, bem como a cópia ilegal do original. Esta prática generalizada nos estabelecimentos de ensino, provoca uma brutal baixa nas vendas dos livros a ponto de impossibilitar os autores de criarem novas obras. Rua Viúva Cláudio, 291 – Jacaré Rio de Janeiro – RJ. CEP: 20970-031 Tel: 21 3278-8069/ Fax: 3277-1253 www.altabooks.com.br e-mail: [email protected] Este livro é dedicado à minha família, que sofre comigo há anos, especialmente à minha esposa, Julie, que teve de agüentar o meu stress e a minha total falta de apoio nos assuntos domésticos, o cansaço, os maus modos e meu estilo de vida anti-social, e aos meus três filhos: Cameron, um astro do rúgbi, finalmente o primeiro da lista; Ellen (outro astro do rúgbi) – sinto pena do homem que se casar com ela –; e Scott, o futuro piloto da Força Aérea e o pé grande da família. Obrigado por agüentarem tudo. Avante, Blues. www.fat-belly.com Sobre o autor ROBIN DEWSON está envolvido com programação desde que comprou seu primeiro computador em 1980, um Sinclair ZX80. Fez seu primeiro aplicativo em Visual FoxPro, e ele poderia ser usado para gerenciar um sistema da Fantasy League. Foi nesse momento, na Step One Technologies, que Robin conheceu um grande apoio em sua vida de desenvolvimento para PC: Jon Silver, a quem ajudou em alguns aplicativos em Visual FoxPro em troca de treinamento. Então, percebendo que o mercado para Visual FoxPro era limitado, decidiu aprender Visual Basic e SQL Server. Começando pelo SQL Server 6.5, Robin logo mudou para o SQL Server 7 e Visual Basic 5 e se envolveu com o desenvolvimento de vários aplicativos para clientes, tanto no Reino Unido como nos Estados Unidos. A partir daí, adotou o SQL Server 2000 e agora o SQL Server 2005, e o Visual Basic 6 virou VS .NET, especializando-se em C# e VB .NET. Robin também é o co-autor de Pro SQL Server 2005 Assemblies, além de outros livros da Apress, e também contribui para o ASPToday (www.asptoday.com). Você pode entrar em contato com ele pelo e-mail [email protected] ou no site www.fat-belly.com. Sobre o revisor técnico JASPER SMITH é um MVP da Microsoft e trabalha com o SQL Server há sete anos. Com freqüência, ele faz palestras nas conferências da PASS (Professional Association for SQL Server) e também gerencia e produz o conteúdo do site www.sqldbatips.com, incluindo alguns utilitários bem populares, como o Reporting Services Scripter e o SQL 2005 Service Manager. Ele também passa muito tempo respondendo a perguntas nos grupos de discussão da Microsoft sobre SQL Server. Agradecimentos Primeiro, meu muito obrigada aos “heróis não-reconhecidos” do clube Bedford Rugby (www.bedfordrugby.co.uk), que há muitos anos tornam meus sábados tão especiais. Desde o grande Colin Jackson, cuja época como diretor de rúgbi afastou o fantasma do rebaixamento em sua primeira temporada, até os jogadores que vieram e deram seu melhor pelo clube e nos fizeram muito felizes em Twickenham. Agradeço também aos muitos amigos no clube, como Bernie McGee, Lee Smith, Nigel Rudgard, Nigel e Sarah Crowe e Sam Roberts, para mencionar apenas alguns. Também aos meus colegas técnicos do Junior Blues, Alan Grosvenor, Richard Porter e Rob Robson, que entenderam quando tive de me afastar por um tempo para trabalhar neste e em outros livros da Apress. Então, agradeço às pessoas que trabalham comigo e que tornaram minha vida um inferno com ligações às 5 da manhã (estou brincando!), Martin Price, Henry Williams, Bill Cotton, Rakesh Juneja, assim como Jack Mason; mas foi Anthony Jawad que tornou estes últimos nove anos possíveis. Eu não sei como te agradecer, Jock. Ah, e obrigado também aos meus parceiros de treinamento que sofrem há muito tempo, Andrew Lockwood e Paul Goodwin... Prometo dormir cedo, perder um pouco de peso para parar de mantê-los acordados em nosso caminho para o trabalho com o meu ronco ensurdecedor! Quando preciso me concentrar, a música é brilhante e não há nada melhor do que o 6Music da BBC (www.bbc.co.uk/6Music). Especialmente os seguintes apresentadores, que diariamente tocam músicas excelentes: Phill Jupitus e Phil Wilding no engraçadíssmo show da manhã, Gideon Coe e seu mau humor e a brilhante Vic McGlynn, que me mantém acordado durante as tardes. Além disso, quando preciso relaxar, obrigado a Debbie e Charlie Roberts do Sandy Hills Amusements em Sea Palling, Norfolk, por terem o melhor parque de diversões da Inglaterra! Obrigado também a Axis (www.axis.com), por criar as melhores webcams do mundo. E, finalmente, obrigado ao Friends Reunited, por me permitir entrar em contato com meu melhor amigo da faculdade, Robert “Toad” McMillan. Para minha sogra, Jean. Obrigado a Lanzarote por ajudar Julie em várias coisas diferentes, tanto na família como na casa. E, é claro, ao meu sogro David, de quem todos nós sentimos saudades e a quem nunca poderemos agradecer o bastante por sua ajuda e orientação inestimáveis. Para meus pais, Laura e Scott. Por não serem capazes de assistir televisão, já que eu a usava para o meu ZX80, e por encontrarem as faculdades para mim; sem vocês em minha vida e me ajudando pelo caminho, eu não teria tanta sorte e esta vida maravilhosa. Nunca poderei agradecer o suficiente, e ambos são pais maravilhosos. Para minha irmã, Carol e seus filhos, Eleanor, Erin e Lucas, espero que agora a gente possa ir à Austrália. Meus agradecimentos mais merecidos vão para todos da Apress, especialmente Dan Appleman, por fazer tanto para ajudar os muitos autores; além disso, é claro, obrigado a Beth Christmas, Kylie Johnson, Tina Nielsen, Matt Moodie, Nicole Le Clerc, Ami Knox, Kelly Winquist e ao sofredor Tony Davis, assim como todos os indexadores etc., que oferecem um trabalho inestimável ao tornarem possível a publicação de um livro. Obrigado também a Christian Lester por sua assistência no Capítulo 14 deste livro. Em cima da hora, devido à limitação de tempo, ele gentilmente me ajudou neste capítulo. Não tenho como agradecer a Jasper Smith pela revisão técnica deste livro. É muito fácil cometer um simples erro ou uma omissão, e a valiosa contribuição de alguém com a capacidade e o conhecimento de Jasper fez deste um grande livro. Não há dúvida de que me esqueci de muitos outros, e peço desculpas a todos. Robin Dewson Sumário Capítulo 1 - Visão Geral e Instalação do SQL Server 2005 ............................................1 Por que o SQL Server 2005? .............................................................................................................................................................. 1 A evolução do SQL Server .................................................................................................................................................................. 2 Requisitos de hardware ....................................................................................................................................................................... 3 CPU ................................................................................................................................................................................... 3 Memória ............................................................................................................................................................................ 4 Espaço em disco rígido ....................................................................................................................................................... 4 Requisitos do sistema operacional ..................................................................................................................................... 4 O exemplo ........................................................................................................................................................................................... 4 Instalação ............................................................................................................................................................................................ 5 Uma Instalação Padrão ....................................................................................................................................................................... 5 Prepare-se para instalar ............................................................................................................................................................................ 5 Escolha dos componentes para instalação .......................................................................................................................... 6 Nomeie a instância ............................................................................................................................................................ 7 Contas de serviço .............................................................................................................................................................. 9 Modo de autenticação ....................................................................................................................................................... 9 Configurações de Classificação .......................................................................................................................................... 9 O banco de dados dos Reporting Services ......................................................................................................................... 10 Configurações de relatórios de erro e de uso .................................................................................................................... 11 Segurança ............................................................................................................................................................................................... 11 Contas de serviços ........................................................................................................................................................... 12 Procurando o modo de autenticação ....................................................................................................................................................... 12 Modo de autenticação do Windows ................................................................................................................................................... 12 Experimente – Modo de Autenticação do Windows ........................................................................................................... 13 Modo misto ..................................................................................................................................................................... 14 O login sa ........................................................................................................................................................................................... 15 Resumo ............................................................................................................................................................................................. 16 Capítulo 2 - SQL Server Management Studio ............................................................... 17 Uma rápida visão geral do SSMS ............................................................................................................................................................ 17 Experimente: um tour pelo SQL Server Management Studio ............................................................................................................ 18 Examine as opções do SSMS .................................................................................................................................................................. 23 O nó Environment .............................................................................................................................................................................. 23 O nó General ................................................................................................................................................................... 23 O nó Fonts and Colors ...................................................................................................................................................... 24 O nó Keyboard ................................................................................................................................................................. 24 O nó Help ........................................................................................................................................................................ 25 O nó Source Control .......................................................................................................................................................................... 25 O nó Text Editor ................................................................................................................................................................................ 26 File Extensions ................................................................................................................................................................. 26 All Languages > General .................................................................................................................................................. 26 All Languages > Tabs ....................................................................................................................................................... 26 O nó Query Execution .............................................................................................................................................................................. 27 SQL Server > General ...................................................................................................................................................... 27 SQL Server > Advanced .................................................................................................................................................... 28 SQL Server > ANSI ........................................................................................................................................................... 29 O nó Query Results .................................................................................................................................................................................. 29 SQL Server > General ...................................................................................................................................................... 29 SQL Server > Results to Grid ............................................................................................................................................ 29 SQL Server > Results to Text ............................................................................................................................................ 30 Query Editor ............................................................................................................................................................................................. 31 A ferramenta Surface Area Configuration ............................................................................................................................................... 32 Experimente: use a ferramenta Surface Area Configuration ............................................................................................... 32 Resumo ................................................................................................................................................................................................... 34 Capítulo 3 - Análise e criação de banco de dados ...................................................... 37 Definição de um banco de dados ............................................................................................................................................................. 37 Os bancos de dados do SQL Server ........................................................................................................................................................ 38 master ............................................................................................................................................................................................... 39 model ................................................................................................................................................................................................. 40 msdb .................................................................................................................................................................................................. 40 AdventureWorks/AdventureWorksDW ............................................................................................................................................... 40 Escolha o tipo do sistema de banco de dados ......................................................................................................................................... 40 OLTP ................................................................................................................................................................................................. 40 Backups ........................................................................................................................................................................... 41 Índices ............................................................................................................................................................................. 41 OLAP ....................................................................................................................................................................................................... 41 Opção do sistema de exemplo ........................................................................................................................................................... 41 Coleta de dados ....................................................................................................................................................................................... 42 Determinação das informações que devem ser armazenadas no banco de dados ................................................................................. 43 Financial Products .................................................................................................................................................................................... 43 Customers ............................................................................................................................................................................................... 44 Customer Addresses ............................................................................................................................................................................... 44 Shares ............................................................................................................................................................................................... 44 Transactions ...................................................................................................................................................................................... 44 Informações externas e ignoradas ........................................................................................................................................................... 44 Criação de relacionamentos .................................................................................................................................................................... 45 Utilização de chaves .......................................................................................................................................................................... 45 Chave primária .................................................................................................................................................................................. 45 Chave estrangeira/de referência ....................................................................................................................................................... 45 Chave candidata/alternativa .............................................................................................................................................................. 45 Um limite exclusivo em vez de uma chave primária ........................................................................................................................... 46 Criação de relacionamentos .................................................................................................................................................................... 46 Os relacionamentos e a integridade referencial ................................................................................................................................. 46 Tipos de relacionamentos .................................................................................................................................................................. 47 Um-para-Um .................................................................................................................................................................... 47 Um-para-Muitos .............................................................................................................................................................. 47 Muitos-para-Muitos ......................................................................................................................................................... 47 Mais sobre chaves estrangeiras ........................................................................................................................................................ 48 Normalização ........................................................................................................................................................................................... 49 Cada entidade deve ter um identificador exclusivo ............................................................................................................................ 50 Armazene apenas as informações que estejam diretamente relacionadas à entidade ..................................................................... 50 Evite repetir valores ou colunas ......................................................................................................................................................... 50 Formas de normalização ......................................................................................................................................................................... 50 Primeira forma normal (1NF) ............................................................................................................................................................ 50 Customers ....................................................................................................................................................................... 50 Shares ............................................................................................................................................................................. 50 Segunda forma normal ...................................................................................................................................................................... 50 Terceira forma normal ....................................................................................................................................................................... 51 Desnormalização ............................................................................................................................................................................... 51 Criação do banco de dados de exemplo .................................................................................................................................................. 52 Criação de um banco de dados no SQL Server Management Studio ............................................................................................... 52 Experimente: criação de um banco de dados no SQL Server Management Studio .............................................................. 52 Remoção de um banco de dados no SQL Server Management Studio ............................................................................................ 60 Experimente: remoção de um banco de dados no SQL Server Management Studio ............................................................ 60 Criação de um banco de dados no painel Query ............................................................................................................................... 62 Experimente: criação de um banco de dados no painel Query ........................................................................................... 62 Como funciona: criação de um banco de dados no Query Editor ............................................................................................................ 62 Resumo ................................................................................................................................................................................................... 64 C a p í t u l o 4 - Segurança ..................................................................................................... 65 Logins ...................................................................................................................................................................................................... 65 Experimente: criação de um grupo .......................................................................................................................................................... 65 Experimente: programação de um login ............................................................................................................................ 69 Logins do servidor e usuários do banco de dados ............................................................................................................................. 71 Roles ........................................................................................................................................................................................................ 71 Roles fixos do servidor ....................................................................................................................................................................... 71 Roles do banco de dados .................................................................................................................................................................. 72 Roles da aplicação ............................................................................................................................................................................. 73 Experimente: criação de um novo role de aplicação ................................................................................................................................ 74 Esquemas ................................................................................................................................................................................................ 75 Experimente: criação de esquemas e adição de objetos .................................................................................................... 76 Antes de prosseguir com a sua solução ................................................................................................................................................... 77 Experimente: como verificar quem é o proprietário do banco de dados .............................................................................. 77 Experimente: permitir que um usuário crie uma tabela ..................................................................................................... 78 Resumo ................................................................................................................................................................................................... 78 C a p í t u l o 5 - Definição de tabelas .................................................................................... 79 O que é uma tabela? ............................................................................................................................................................................... 79 Definição de uma tabela: SQL Server Management Studio ..................................................................................................................... 80 Tipos de dados diferentes ................................................................................................................................................................. 80 char ................................................................................................................................................................................. 80 nchar ............................................................................................................................................................................... 80 varchar ............................................................................................................................................................................ 81 nvarchar .......................................................................................................................................................................... 81 text ................................................................................................................................................................................. 81 ntext ................................................................................................................................................................................ 81 image .............................................................................................................................................................................. 81 int ................................................................................................................................................................................... 81 bigint ............................................................................................................................................................................... 81 smallint ........................................................................................................................................................................... 81 tinyint .............................................................................................................................................................................. 82 decimal/numeric .............................................................................................................................................................. 82 float ................................................................................................................................................................................ 82 real ................................................................................................................................................................................. 82 money ............................................................................................................................................................................. 82 smallmoney ..................................................................................................................................................................... 82 datetime .......................................................................................................................................................................... 82 smalldatetime ................................................................................................................................................................. 82 timestamp ....................................................................................................................................................................... 82 uniqueidentifier ............................................................................................................................................................... 82 binary .............................................................................................................................................................................. 83 varbinary ......................................................................................................................................................................... 83 bit ................................................................................................................................................................................... 83 XML ................................................................................................................................................................................ 83 Tipos de dados de programa diferentes ............................................................................................................................................ 83 cursor .............................................................................................................................................................................. 83 table ................................................................................................................................................................................ 83 sql_variant ...................................................................................................................................................................... 83 As colunas são mais do que simples repositórios de dados ..................................................................................................................... 83 Valores padrão .................................................................................................................................................................................. 83 Geração de valores IDENTITY .......................................................................................................................................................... 83 O uso de valores NULL ..................................................................................................................................................................... 84 Por que definir uma coluna para que ela permita um NULL? ........................................................................................................... 84 Armazenamento de imagens e de textos grandes no SQL Server .......................................................................................................... 84 Criação de uma tabela no SQL Server Management Studio ................................................................................................................... 85 Experimente: definição de uma tabela .............................................................................................................................. 85 Definição de uma tabela por meio do Query Editor ................................................................................................................................. 89 Experimente: definição de uma tabela por meio do Query Editor ....................................................................................... 89 Como funciona: definição de uma tabela por meio do painel Query ........................................................................................................ 90 Definição de uma tabela: uso de um modelo ........................................................................................................................................... 90 Experimente: criação de uma tabela usando um modelo ................................................................................................... 91 Criação e alteração de um modelo .......................................................................................................................................................... 93 Experimente: criação de um modelo a partir de um modelo existente ............................................................................... 93 O comando ALTER TABLE ..................................................................................................................................................................... 94 Experimente: adição de uma coluna ................................................................................................................................. 94 Definição das tabelas restantes ............................................................................................................................................................... 94 Definição de uma chave primária ............................................................................................................................................................. 95 Experimente: definição de uma chave primária ................................................................................................................. 95 Criação de um relacionamento ................................................................................................................................................................ 96 Experimente: criação de um relacionamento .................................................................................................................... 96 Verificar dados existentes na criação ................................................................................................................................................. 98 Force os limites de chave estrangeira ............................................................................................................................................... 98 Regra de exclusão/regra de atualização ........................................................................................................................................... 98 Uso da declaração ALTER TABLE do SQL ............................................................................................................................................. 99 Experimente: uso do SQL para a criação de um relacionamento ...................................................................................... 100 Resumo ................................................................................................................................................................................................. 100 Capítulo 6 - Criação de índices e diagramação do banco de dados...................... 101 O que é um índice? ................................................................................................................................................................................ 101 Tipos de índices ............................................................................................................................................................................... 102 Agrupado ....................................................................................................................................................................... 102 Não-agrupado ............................................................................................................................................................... 102 XML primário e secundário ............................................................................................................................................ 103 Exclusividade ................................................................................................................................................................. 103 Como determinar se um índice é bom ................................................................................................................................................... 103 Uso de colunas com pouca manutenção ......................................................................................................................................... 103 Chaves primária e estrangeira ........................................................................................................................................................ 104 Encontre registros específicos ......................................................................................................................................................... 104 Uso de índices de cobertura ............................................................................................................................................................ 104 À procura de um conjunto de informações ...................................................................................................................................... 104 Mantenha os dados em ordem ........................................................................................................................................................ 105 Como determinar se um índice é ruim ................................................................................................................................................... 105 Uso de colunas inadequadas ........................................................................................................................................................... 105 Escolha de dados inadequados ....................................................................................................................................................... 105 Inclusão de várias colunas em um índice ......................................................................................................................................... 105 Pequeno número de registros na tabela ......................................................................................................................................... 105 Revisão dos índices para melhora do desempenho .............................................................................................................................. 106 Criação de um índice ............................................................................................................................................................................. 106 Criação de um índice – Table Designer .......................................................................................................................................... 106 Experimente – criação de um índice graficamente .......................................................................................................... 107 Índices e estatísticas ........................................................................................................................................................................ 108 A sintaxe de CREATE INDEX ......................................................................................................................................................... 109 IGNORE_DUP_KEY ........................................................................................................................................................................ 109 DROP_EXISTING ........................................................................................................................................................................... 110 Criação de um índice no Query Editor – modelo ................................................................................................................................... 110 Experimente: use um modelo do Query Editor para criar um índice ................................................................................. 110 Criação de um índice – Query Editor– código SQL ......................................................................................................................... 112 Experimente: criação de um índice no Query Editor ........................................................................................................ 112 Retirada de um índice ............................................................................................................................................................................ 114 Experimente: retirada de um índice no Query Editor ....................................................................................................... 114 Alteração de um índice no Query Editor .......................................................................................................................................... 115 Experimente: alteração de um índice no Query Editor ..................................................................................................... 115 Diagramação do banco de dados .......................................................................................................................................................... 116 Fundamentos básicos da diagramação de banco de dados ............................................................................................................ 116 A ferramenta Database Diagram do SQL Server ............................................................................................................................ 116 O diagrama de banco de dados padrão .......................................................................................................................................... 117 Experimente: criação de um diagrama de banco de dados .............................................................................................. 118 A barra de ferramentas Database Diagram .................................................................................................................................... 119 Resumo ................................................................................................................................................................................................. 121 Capítulo 7 - Backup e recuperação de banco de dados e manutenção ............... 123 Logs de transações ................................................................................................................................................................................ 124 Estratégias de backup ............................................................................................................................................................................ 125 Quando pode haver problemas ............................................................................................................................................................. 126 Desative um banco de dados (off-line) ............................................................................................................................................ 126 Experimente: desativação de um banco de dados ........................................................................................................... 127 Faça backup dos dados ......................................................................................................................................................................... 127 Experimente: backup dos dados ..................................................................................................................................... 128 Faça backup do banco de dados usando o T-SQL ......................................................................................................................... 131 Experimente: backup do BD com T-SQL para backup FULL ou DIFFERENTIAL ..................................................................... 133 Experimente: faça backup do log de transações usando o T-SQL ........................................................................................................ 136 Restauração de um banco de dados ..................................................................................................................................................... 137 Faça uma restauração usando o SQL Server Management Studio ................................................................................................ 137 Experimente: restauração do banco de dados ................................................................................................................. 138 Faça uma restauração usando o T-SQL ......................................................................................................................................... 139 Experimente: faça uma restauração usando o T-SQL ........................................................................................................ 141 Detach e attach de um banco de dados ................................................................................................................................................ 142 Experimente: detach de um banco de dados ................................................................................................................... 143 Experimente: attach de um banco de dados .................................................................................................................... 144 Detach e attach usando T-SQL ....................................................................................................................................................... 146 Experimente: detach e attach de um banco de dados ...................................................................................................... 147 Produza um script SQL para o banco de dados .............................................................................................................................. 147 Experimente: produção do SQL do banco de dados ......................................................................................................... 147 Manutenção do seu banco de dados ..................................................................................................................................................... 152 Criação de um plano de manutenção para o banco de dados .............................................................................................................. 153 Experimente: criação de um plano de manutenção para o banco de dados ...................................................................... 153 Resumo ................................................................................................................................................................................................. 162 A sintaxe do comando T-SQL INSERT .................................................................................................................................................. 163 Capítulo 8 - Trabalhe com os dados ............................................................................ 163 O comando INSERT SQL ...................................................................................................................................................................... 164 Experimente: scripts do Query Editor .............................................................................................................................. 164 Valores padrão ................................................................................................................................................................................ 166 Uso de valores NULL ...................................................................................................................................................................... 166 Experimente: Valores Null e SQL Server Management Studio Comparado ao T-SQL .......................................................... 167 DBCC CHECKIDENT ..................................................................................................................................................................... 169 Limites de coluna ............................................................................................................................................................................. 170 ADD CONSTRAINT ......................................................................................................................................................... 170 Experimente: alteração de uma tabela para o valor padrão no Query Editor .................................................................... 171 Como lidar com vários registros ao mesmo tempo .......................................................................................................................... 174 Inserção de vários registros em uma consulta em lote .................................................................................................... 174 Experimente: inserção de vários registros de uma só vez ................................................................................................ 175 Recuperação de dados .......................................................................................................................................................................... 175 Uso do SQL Server Management Studio para a recuperação de dados ............................................................................................... 176 Experimente: recuperação de dados no SQL Server Management Studio ......................................................................... 176 A declaração SELECT ........................................................................................................................................................................... 178 Nomeie as colunas ................................................................................................................................................................................. 179 As primeiras buscas ............................................................................................................................................................................... 179 Experimente: o primeiro conjunto de buscas ................................................................................................................... 179 Exiba a saída de maneira diferente ....................................................................................................................................................... 181 Experimente: coloque os resultados em texto e em um arquivo ....................................................................................... 181 Limite a busca: o uso de WHERE .......................................................................................................................................................... 182 Experimente: a declaração WHERE ................................................................................................................................. 182 SET ROWCOUNT n ........................................................................................................................................................................ 185 Experimente: SET ROWCOUNT ....................................................................................................................................... 185 TOP n .............................................................................................................................................................................................. 185 TOP n PERCENT ............................................................................................................................................................................ 186 Funções de string .................................................................................................................................................................................. 186 Experimente: funções de string ...................................................................................................................................... 186 Ordem! Ordem! ...................................................................................................................................................................................... 187 Experimente: alteração da ordem ................................................................................................................................... 188 O operador LIKE .................................................................................................................................................................................... 188 Experimente: o operador LIKE ........................................................................................................................................ 189 Criação de dados: SELECT INTO ......................................................................................................................................................... 190 Experimente: SELECT INTO ............................................................................................................................................. 190 Quem pode adicionar, excluir e selecionar os dados ............................................................................................................................. 191 Experimente: refinamento de permissões ....................................................................................................................... 191 Securables ....................................................................................................................................................................................... 193 Atualização de dados ....................................................................................................................................................................... 194 O comando UPDATE ...................................................................................................................................................................... 195 Atualização de dados no Query Editor ............................................................................................................................................. 195 Experimente: atualização de uma linha de dados ............................................................................................................ 196 Transações ............................................................................................................................................................................................ 198 BEGIN TRAN .................................................................................................................................................................. 199 COMMIT TRAN .............................................................................................................................................................. 199 ROLLBACK TRAN ........................................................................................................................................................... 199 Bloqueio de dados ........................................................................................................................................................................... 199 Atualização de dados: uso de transações ........................................................................................................................................ 200 Experimente: uso de uma transação ............................................................................................................................... 200 Transações aninhadas .................................................................................................................................................... 201 Exclusão de dados ................................................................................................................................................................................. 202 Sintaxe de DELETE ......................................................................................................................................................................... 203 O uso da declaração DELETE ......................................................................................................................................................... 203 Experimente: exclusão de registros ................................................................................................................................ 203 Truncamento de uma tabela ........................................................................................................................................................... 205 Remoção de uma tabela ................................................................................................................................................................. 205 Resumo ................................................................................................................................................................................................. 206 Capítulo 9 - Criação de uma visualização ................................................................... 207 O que é uma visualização? .................................................................................................................................................................... 207 O uso das visualizações como segurança ........................................................................................................................................ 208 Como criptografar as visualizações ................................................................................................................................................. 209 Criação de uma visualização – SQL Server Management Studio .................................................................................................... 209 Experimente: criação de uma visualização no SQL Server Management Studio ................................................................ 209 Criação de uma visualização – usando uma visualização ...................................................................................................................... 214 Experimente: criar uma visualização usando uma visualização ........................................................................................ 214 A sintaxe de CREATE VIEW ........................................................................................................................................................... 218 Criação de uma visualização – painel do Query Editor .......................................................................................................................... 219 Experimente: criação de uma visualização no painel do Query Editor .............................................................................. 219 Criação de uma visualização – SCHEMABINDING ............................................................................................................................... 220 Experimente: criar uma visualização usando SCHEMABINDING ....................................................................................... 220 Indexação de uma visualização .............................................................................................................................................................. 221 Experimente: indexação de uma visualização .................................................................................................................. 222 Resumo ................................................................................................................................................................................................. 223 Capítulo 10 - Procedimentos Armazenados ............................................................... 225 O que é um procedimento armazenado? .............................................................................................................................................. 225 A sintaxe de CREATE PROCEDURE .................................................................................................................................................... 226 Returno de um conjunto de registros ..................................................................................................................................................... 228 Criação de um procedimento armazenado – Management Studio ........................................................................................................ 228 Experimente: Criando uma Stored Procedure usando SQL Server Management Studio ..................................................... 228 Métodos de execução diferentes ........................................................................................................................................................... 231 Sem EXEC ...................................................................................................................................................................................... 231 Com EXEC ...................................................................................................................................................................................... 231 Uso do RETURN ................................................................................................................................................................................... 231 Experimente: Uso de RETURN e dos parâmetros de saída ............................................................................................... 232 Controle de fluxo .................................................................................................................................................................................... 234 IF … ELSE ............................................................................................................................................................................................. 234 BEGIN…END ........................................................................................................................................................................................ 235 A declaração WHILE...BREAK ............................................................................................................................................................... 235 Experimente: WHILE...BREAK .......................................................................................................................................... 235 A declaração CASE ............................................................................................................................................................................... 237 Experimente: O uso da declaração CASE ........................................................................................................................ 238 Vamos juntar tudo ........................................................................................................................................................................... 239 Experimente: Vamos juntar tudo ..................................................................................................................................... 239 Resumo ................................................................................................................................................................................................. 240 Capítulo 11 - Fundamentos básicos do T-SQL .......................................................... 241 Use mais de uma tabela ........................................................................................................................................................................ 241 Experimente: Associando duas tabelas ........................................................................................................................... 242 Variáveis ................................................................................................................................................................................................ 245 Experimente: declaração e trabalho com variáveis .......................................................................................................... 245 Tabelas temporárias .............................................................................................................................................................................. 246 Experimente: tabelas temporárias .................................................................................................................................. 247 Combinações ......................................................................................................................................................................................... 248 COUNT/COUNT_BIG ..................................................................................................................................................................... 248 Experimente: contar linhas ............................................................................................................................................. 248 SUM ................................................................................................................................................................................................ 249 Experimente: soma de valores ........................................................................................................................................ 249 MAX/MIN ......................................................................................................................................................................................... 249 Experimente: MAX e MIN ............................................................................................................................................... 249 AVG ................................................................................................................................................................................................. 250 Experimente: fazendo a média ....................................................................................................................................... 250 GROUP BY ...................................................................................................................................................................................... 250 Experimente: GROUP BY ................................................................................................................................................ 250 HAVING ........................................................................................................................................................................................... 251 Experimente: HACING .................................................................................................................................................... 251 Valores distintos ..................................................................................................................................................................................... 252 Experimente: valores distintos ....................................................................................................................................... 252 Funções ................................................................................................................................................................................................. 252 Data e hora ..................................................................................................................................................................................... 252 DATEADD() ..................................................................................................................................................................... 253 Experimente: DATEADD() ................................................................................................................................................ 253 DATEDIFF() ..................................................................................................................................................................... 253 DATENAME() .................................................................................................................................................................. 254 DATEPART() .................................................................................................................................................................................. 254 Experimente: Parte de uma data .................................................................................................................................... 254 GETDATE() ..................................................................................................................................................................... 255 String ............................................................................................................................................................................ 255 ASCII() ........................................................................................................................................................................... 255 Experimente: ASCII() ....................................................................................................................................................... 255 CHAR() ........................................................................................................................................................................... 255 Experimente: CHAR() ...................................................................................................................................................... 255 LEFT() ............................................................................................................................................................................................. 256 Experimente: LEFT() ........................................................................................................................................................ 256 LOWER() ........................................................................................................................................................................ 256 Experimente: LOWER() ................................................................................................................................................... 256 LTRIM() .......................................................................................................................................................................... 256 Experimente: LTRIM() ..................................................................................................................................................... 256 RIGHT() .......................................................................................................................................................................... 257 Experimente: RIGHT() ..................................................................................................................................................... 257 RTRIM() ......................................................................................................................................................................... 257 Experimente: RTRIM() ..................................................................................................................................................... 257 STR() .............................................................................................................................................................................. 257 Experimente: STR() ......................................................................................................................................................... 257 SUBSTRING() ................................................................................................................................................................. 258 Experimente: SUBSTRING() ............................................................................................................................................ 258 UPPER() ......................................................................................................................................................................... 258 Experimente: UPPER() ..................................................................................................................................................... 258 Funções do sistema ......................................................................................................................................................................... 259 CASE WHEN...THEN...ELSE...END .................................................................................................................................... 259 Experimente: CASE ........................................................................................................................................................ 259 CAST()/CONVERT() .......................................................................................................................................................... 259 Experimente: CAST()/CONVERT ...................................................................................................................................... 260 ISDATE() ......................................................................................................................................................................... 260 Experimente: ISDATE() .................................................................................................................................................... 260 ISNULL() ......................................................................................................................................................................... 261 Experimente: ISNULL() .................................................................................................................................................... 261 ISNUMERIC() .................................................................................................................................................................. 261 Experimente: ISNUMERIC() ............................................................................................................................................. 261 RAISERROR ......................................................................................................................................................................................... 262 Experimente: RAISERROR .............................................................................................................................................. 263 Manipulação de erros ............................................................................................................................................................................ 264 @@ERROR .......................................................................................................................................................................................... 264 Experimente: uso de @@ERROR .................................................................................................................................... 264 TRY...CATCH ........................................................................................................................................................................................ 265 Experimente: TRY...CATCH .............................................................................................................................................. 266 Resumo ................................................................................................................................................................................................. 268 Capítulo 12 - T-SQL avançado ...................................................................................... 269 Subconsultas .......................................................................................................................................................................................... 269 IN ..................................................................................................................................................................................................... 270 EXISTS ............................................................................................................................................................................................ 271 O operador APPLY ................................................................................................................................................................................ 271 CROSS APPLY ............................................................................................................................................................................... 272 OUTER APPLY ............................................................................................................................................................................... 272 Expressões comuns de tabela ............................................................................................................................................................... 273 CTE recursiva .................................................................................................................................................................................. 274 Agrupamento de dados ......................................................................................................................................................................... 275 PIVOT .............................................................................................................................................................................................. 275 Funções de classificação ........................................................................................................................................................................ 277 ROW_NUMBER .............................................................................................................................................................................. 278 RANK .............................................................................................................................................................................................. 279 DENSE_RANK ................................................................................................................................................................................ 280 NTILE .............................................................................................................................................................................................. 281 Uso do tipo de dados MAX .................................................................................................................................................................... 281 Experimente: trabalhe com dados de texto no LOB ......................................................................................................... 282 LOB de Imagens .............................................................................................................................................................................. 283 Experimente: trabalhe com dados de imagem no LOB .......................................................................................................................... 283 Resumo ................................................................................................................................................................................................. 284 C a p í t u l o 13 - Gatilhos ..................................................................................................... 285 O que é um gatilho? ............................................................................................................................................................................... 285 O gatilho DML ........................................................................................................................................................................................ 285 A sintaxe de CREATE TRIGGER para gatilhos DML ............................................................................................................................ 286 Por que não usar um limite? .................................................................................................................................................................. 287 Tabelas lógicas excluídas e inseridas ..................................................................................................................................................... 288 Criação de um gatilho DML FOR ........................................................................................................................................................... 288 Experimente: criação de um gatilho no Query Editor ....................................................................................................... 288 Verificação de colunas específicas ......................................................................................................................................................... 291 O uso do UPDATE() ........................................................................................................................................................................ 291 Experimente: função UPDATE() ........................................................................................................................................ 291 Uso de COLUMNS_UPDATED() .................................................................................................................................................... 294 Experimente: COLUMNS_UPDATE() ................................................................................................................................. 295 Gatilhos DDL .......................................................................................................................................................................................... 296 DDL_DATABASE_LEVEL_EVENTS ............................................................................................................................................... 296 Declarações DDL com escopo de servidor ...................................................................................................................................... 297 Remoção de um gatilho DDL ................................................................................................................................................................. 297 EVENTDATA() ...................................................................................................................................................................................... 297 Experimente: gatilho DDL ............................................................................................................................................... 298 Resumo ................................................................................................................................................................................................. 299 Capítulo 14 - Reporting Services do SQL Server 2005.............................................. 301 O que é Reporting Services? ................................................................................................................................................................. 301 Visão geral da arquitetura do Reporting Services .................................................................................................................................. 301 Arquitetura do Reporting Services: um exame mais detalhado ............................................................................................................. 302 A camada de aplicação .................................................................................................................................................................... 302 Browser da Web ............................................................................................................................................................. 302 Ferramentas de relatório ................................................................................................................................................ 303 Business Intelligence Management Studio ..................................................................................................................... 303 Ferramentas de configuração ......................................................................................................................................................... 303 SQL Server Configuration Manager ................................................................................................................................. 303 Surface Area Configuration ............................................................................................................................................. 303 Report Manager ............................................................................................................................................................ 303 Reporting Services Configuration Tool ............................................................................................................................ 303 SQL Server Management Studio ..................................................................................................................................... 303 Ferramentas de linha de comando .................................................................................................................................. 304 Aplicativos personalizados ............................................................................................................................................................... 304 A camada de servidor ...................................................................................................................................................................... 304 Serviço Web ................................................................................................................................................................... 304 Serviço do Windows ....................................................................................................................................................... 304 Interfaces de programação ............................................................................................................................................. 304 Processadores ............................................................................................................................................................... 305 Extensões ...................................................................................................................................................................... 305 Extensões de autenticação .............................................................................................................................................................. 305 Extensões de processamento de dados .......................................................................................................................................... 305 Extensões de execução .................................................................................................................................................. 305 Extensões de processamento de relatórios ..................................................................................................................................... 305 Extensões de entrega ..................................................................................................................................................... 305 A camada de dados ......................................................................................................................................................................... 305 Bancos de dados do servidor de relatórios ...................................................................................................................... 305 Fontes de dados .............................................................................................................................................................................. 305 Criação do seu primeiro relatório usando o Report Wizard ................................................................................................................... 305 Experimente: uso do Report Wizard ................................................................................................................................ 306 Criação de um relatório a partir do zero ................................................................................................................................................ 308 Elementos relacionados aos dados ................................................................................................................................................. 308 Fontes de dados .............................................................................................................................................................................. 308 Conjunto de dados .......................................................................................................................................................................... 309 Campos ........................................................................................................................................................................................... 309 Campos personalizados .................................................................................................................................................................. 309 Itens do relatório .............................................................................................................................................................................. 309 Regiões de dados .......................................................................................................................................................... 309 Itens independentes ...................................................................................................................................................... 309 Estrutura dos relatórios ................................................................................................................................................................... 309 Try It Out: Creating a Report Structure ........................................................................................................................... 310 Experimente: aperfeiçoe o relatório ................................................................................................................................ 312 Experimente: implementação do relatório (opcional) ....................................................................................................... 313 Resumo ................................................................................................................................................................................................. 314 Introdução SQL Server 2005 para Desenvolvedores é para aquelas pessoas que querem se tornar desenvolvedores, administradores de bancos de dados ou uma mistura de ambos, mas que ainda não trilharam esse caminho com o SQL Server 2005. Caso você não conheça bancos de dados, ou conheça os bancos de dados de estação de trabalho, como o MS Access, ou mesmo tenha vindo de um ambiente baseado em servidor como Oracle, este livro oferecerá a base necessária para que você utilize o SQL Server 2005. Desde o início, seu conhecimento básico será expandido e você logo estará passando de um total iniciante a um desenvolvedor competente e profissional. O objetivo deste livro é informar um grande número de desenvolvedores, desde aqueles que preferem utilizar a interface gráfica para quase todo o trabalho até aqueles que querem se tornar adeptos da linguagem de programação do SQL Server 2005, o T-SQL. Durante as práticas, cada método de uso do SQL Server 2005 será demonstrado, explicado e estendido para que você possa avaliar o que funciona melhor em cada situação. Há vários exemplos neste livro sobre cada ação, junto com detalhes sobre a segurança dos seus dados. Você aprenderá também a melhor maneira de completar uma tarefa e até mesmo como tomar a decisão correta quando houver duas ou mais opções que possam ser feitas. Quando chegar ao final do livro, você será capaz de projetar e criar soluções de banco de dados sólidas e confiáveis de maneira competente e profissional.