Bases de Dados II ISEP _________________________________________________________________________________________

1 INTRODUÇÃO ............................................................................................................................................... 3 1.1 SEGURANÇA ................................................................................................................................................ 3 1.1.1 Tipos de Autenticação ......................................................................................................................... 3 1.1.2 Roles .................................................................................................................................................... 3 1.1.3 Logins .................................................................................................................................................. 3 1.1.4 Users .................................................................................................................................................... 4 1.2 ACESSO AO SQL SERVER ............................................................................................................................ 4 1.2.1 Database API....................................................................................................................................... 4 1.3 SERVIÇOS SQLSERVER (WINDOWS NT) ..................................................................................................... 4 1.3.1 MSSQLServer ...................................................................................................................................... 4 1.3.2 SQLServerAgent .................................................................................................................................. 5 1.3.3 MSDTC (Distributed Transaction Coordinator) ................................................................................. 5 1.4 ARQUITECTURA DA BASE DE DADOS NO SQL SERVER ................................................................................. 6 1.4.1 Arquitectura lógica .............................................................................................................................. 6 1.4.2 Arquitectura física ............................................................................................................................... 6 Page .............................................................................................................................................................. 6 1.4 BASES DE DADOS DO SISTEMA ................................................................................................................... 11 1.4.1 Master ................................................................................................................................................ 11 1.4.2 Model ................................................................................................................................................. 12 1.4.3 Tempdb .............................................................................................................................................. 12 1.4.4 Msdb .................................................................................................................................................. 13 1.5 TABELAS DO SISTEMA................................................................................................................................ 13 1.6 DATABASE FILES ....................................................................................................................................... 13 1.6.1 Data files ........................................................................................................................................... 13 1.6.2 Nomes de ficheiros no SQL Server .................................................................................................... 14 2. INTRODUÇÃO AO TRANSACT-SQL ..................................................................................................... 15 2.1 DCL – DATA CONTROL LANGUAGE .......................................................................................................... 15 2.1.1 Syntax da instrução Grant ................................................................................................................. 15 2.1.2 Syntax da instrução Deny .................................................................................................................. 17 2.1.3 Syntax da instrução Revoke ............................................................................................................... 18 2.2 DDL – DATA DEFINITION LANGUAGE ....................................................................................................... 19 2.3 DML – DATA MANIPULATION LANGUAGE................................................................................................ 19 2.4 VARIÁVEIS, OPERADORES, FUNÇÕES E INSTRUÇÕES DE CONTROLO ........................................................... 19 2.4.1 Variáveis ............................................................................................................................................ 19 2.4.2 Operadores ........................................................................................................................................ 23 2.4.3 Funções ............................................................................................................................................. 25 2.4.4 Elementos de controlo ....................................................................................................................... 28 2.5 MODOS DE EXECUÇÃO DO T-SQL ............................................................................................................. 29 2.5.1 T-SQL Dinâmico ................................................................................................................................ 29 2.5.2 Batch .................................................................................................................................................. 29 2.5.3 Scripts ................................................................................................................................................ 30 2.5.4 Transações......................................................................................................................................... 30 3. CRIAÇÃO DA BD ........................................................................................................................................ 31 3.1 INTRODUÇÃO ............................................................................................................................................. 31 3.2 CRIAR, ALTERAR E APAGAR UMA BD ........................................................................................................ 31 3.2 TIPOS DE DADOS ........................................................................................................................................ 35 3.2.1 Tipo de dados pré-definidos .............................................................................................................. 35 3.2.2 Tipo de dados definidos pelo utilizador............................................................................................. 36 3.3 TABELAS ................................................................................................................................................... 37 3.3.1 Criar, alterar e apagar tabelas ......................................................................................................... 37 3.4 INTEGRIDADE DA BD ................................................................................................................................. 43 3.4.1 Tipos de integridade .......................................................................................................................... 43 3.4.2 Definição de Constraints ................................................................................................................... 44 3.4.3 Defaults ............................................................................................................................................. 47 3.4.4 Rules .................................................................................................................................................. 48 3.5 BASE DE DADOS MERCADO ....................................................................................................................... 48 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 1

Bases de Dados II ISEP _________________________________________________________________________________________ 3.6 INTEGRIDADADE DA BD MERCADO ........................................................................................................... 50 3.7 INDEXES .................................................................................................................................................... 55 3.7.1 Clustered Indexes .............................................................................................................................. 57 3.7.2 Nonclustered Indexes......................................................................................................................... 57 3.7.3 Criação de indexes na BD Mercado .................................................................................................. 58 4. ACESSO A DADOS ..................................................................................................................................... 59 4.1 JOINS ......................................................................................................................................................... 60 4.2 FUNÇÕES DE AGREGAÇÃO ......................................................................................................................... 62 4.3 SUBQUERIES.............................................................................................................................................. 63 4.4 METACARCTERES ...................................................................................................................................... 65 4.5 UNIONS...................................................................................................................................................... 67 5. TRANSAÇÕES E BLOQUEAMENTOS ................................................................................................... 68 5.1 EXPLICIT TRANSACTIONS .......................................................................................................................... 69 5.2 AUTOCOMMIT TRANSACTIONS .................................................................................................................. 69 5.3 IMPLICIT TRANSACTIONS ........................................................................................................................... 70 5.4 NESTED TRANSACTIONS ............................................................................................................................ 71 5.5 BLOQUEAMENTOS ..................................................................................................................................... 72 6. CURSORS ..................................................................................................................................................... 73 6.1 MANIPULAÇÃO .......................................................................................................................................... 77 7. VIEWS ........................................................................................................................................................... 80 8. STORED PROCEDURES ........................................................................................................................... 83 8.1 VANTAGENS .............................................................................................................................................. 83 8.2 SYNTAX ..................................................................................................................................................... 84 8.3 PARÂMETROS ............................................................................................................................................ 86 8.4 EXERCÍCIOS ............................................................................................................................................... 87 9. USER FUNCTIONS ..................................................................................................................................... 91 9.1 UTILIZAÇÃO .............................................................................................................................................. 91 9.2 SCALAR FUNCTIONS .................................................................................................................................. 91 9.3 INLINE TABLE-VALUED FUNCTIONS .......................................................................................................... 92 9.4 MULTI-STATEMENT TABLE-VALUED FUNCTIONS ...................................................................................... 92 9.5 SYNTAX ..................................................................................................................................................... 93 9.6 EXERCICIOS ............................................................................................................................................... 96 10.EXERCÍCIOS .............................................................................................................................................. 97 11. TRIGGERS ............................................................................................................................................... 104 11.1 UTILIZAÇÃO .......................................................................................................................................... 104 11.1 SYNTAX ................................................................................................................................................. 105 11.2 EXERCÍCIOS ........................................................................................................................................... 108 13. EXERCÍCIOS GERAIS........................................................................................................................... 111 BIBLIOGRAFIA ............................................................................................................................................... 116

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 2

1. Desta forma. não é necessário especificar o loginID nem a password porque a autenticação é efectuada através da conta que o cliente usou para se validar no sistema operativo.1. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. todos os Users com um determinado Role são validados da mesma forma. Os atributos de segurança na rede permitem ou não o acesso ao SQLServer. pelo que.3 Logins Logins são contas de utilizadores do SQLServer.1. Windows NT Authentication Usando este tipo de autenticação. no mínimo é necessário saber: O protocolo de rede que o servidor suporta Qual o tipo de autenticação O nome de rede ou o endereço IP do servidor O login e password 1. 1. no entanto. podem ser utilizadores das mesmas.1 Segurança O SQLServer tem uma arquitectura Client/Server.Bases de Dados II ISEP _________________________________________________________________________________________ 1 Introdução 1. para ligar um cliente a um servidor SQL Server.1 Tipos de Autenticação O SQLServer suporta dois métodos de autenticação de utilizadores: SQL Server Authentication Este tipo de autenticação pressupõe a existência de um loginID e respectiva password para validar o acesso. Os Logins não são dependentes das bases de dados. 1.2 Roles Os Roles permitem a simplificação de processos de manutenção e atribuição de permissões de acesso a bases de dados.01) Pág 3 . Podemos assignar Users a Roles e definir regras para os Roles.

1 MSSQLServer Faz a gestão de todos os ficheiros que compõem as bases de dados no servidor. como por exemplo o ISQL.Bases de Dados II ISEP _________________________________________________________________________________________ 1. Essas aplicações acedem ao SQL Server através de uma Database API (Database Application Programming Interface) 1.3. Conjunto de funções ou interfaces e métodos que servem para enviar os comandos para a base de dados e processar os resultados retornados por ela. 1. 1. Transact-SQL É a linguagem usada no SQL Server Suporta todos os comandos SQL-92 Suporta extensões ODBC ao SQL-92 Suporta outras extensões específicas ao Transact-SQL 1. têm que usar aplicações escritas para esse fim.01) Pág 4 .4 Users Um User é um Login com permissão de acesso a uma determinada base de dados.1.2 Acesso ao SQL Server Os utilizadores não acedem directamente ao SQL Server. e processa todos os comandos Transact-SQL enviados pelos clientes.1 Database API Contém duas partes: Comandos (TRANSACT-SQL) passados para a base de dados.2. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.3 Serviços SQLServer (Windows NT) O SQLServer é composto por um conjunto de serviços (programas) que têm que estar a correr no servidor. isto é.

são blocos de instruções Transact-SQL que podem ser escalonados. em suma. Coordena a confirmação (commit) da transacção distribuida através de todos os servers envolvidos na transacção. ou uma base de dados em vias de atingir o limite de espaço predefinido. para serem executados a datas específicas ou segundo intervalos de tempo predefinidos. um determinado erro.2 SQLServerAgent Permite gerir o escalonamento de actividades periódicas e notificar os administradores de problemas que ocorram no SQL Server. Podem ser alvo de Alerts via email. Os eventos podem ser. Operators São pessoas identificadas pela sua conta de rede ou email. por exemplo. ou executar um Job que permita resolver a situação. Pode ser configurado para executar acções tais como enviar um email. Alerts São acções a serem tomadas quando situações de erro específicas (eventos) acontecerem. Componentes do serviço: Jobs São objectos que consistem em um ou mais comandos a serem executados. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. de tal forma que todas as alterações em todos os servers são todas confirmadas ou então todas eliminadas. 1. e que estão habilitadas para dar resposta aos erros que aconteçam no SQLServer.3.3 MSDTC (Distributed Transaction Coordinator) O MSDTC é um gestor de transacções que permite às aplicações cliente a inclusão de diferentes fontes de dados numa única transacção.01) Pág 5 .3. pager ou comandos net send.Bases de Dados II ISEP _________________________________________________________________________________________ 1. um erro com uma severidade específica.

2 Arquitectura física Page É a unidade fundamental de espaço para o registo da informação no SQL Server. o que significa que no SQL Server as bases de dados têm 128 pages por megabyte.4 Arquitectura da base de dados no SQL Server Componentes lógicos Componentes físicos 1.Informação de controlo .ObjectID do objecto a quem a página pertence Data rows .4.4.Espaço livre . no SQL Server o tamanho maximo de uma linha é de 8060 bytes Offset . Index.Cada linha não pode ocupar mais do que uma página. e por isso. Page Free Space.Bases de Dados II ISEP _________________________________________________________________________________________ 1. Text & Image.1 Arquitectura lógica Datatypes Tables Indexes Views Constraints Rules Defaults Stored procedures Triggers User data types 1. Index Allocation Map) Header .Tem um registo por cada linha que existe na página 96 bytes 8096 bytes 36 bytes _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 6 . Global Allocation Map. Tipos de página (Data. Cada página tem 8K.

Cada linha não pode ocupar mais do que uma página. Header Informação de controlo. ... Inserção e eliminação de linhas numa data page. 123 96 As linhas das tabelas são guardadas em Data Pages. Page ID (FileID + Page#) Apontadores para a anterior e a proxima páginas Tipo de página Index ID 0 Heap table 1 Clustered table >1 Nonclustered index 255 Text ou Image table Offset Define a localização de uma linha numa página (rowid).. .01) Pág 7 . Exemplo para uma tabela com um campo de 20 bytes e n linhas por página. Alguns campos são usados pelo SQLServer para verificação de consistência nas estruturas de dados e outros para navegação nas páginas.Bases de Dados II ISEP _________________________________________________________________________________________ Data Page Header Linha 1 Linha 2 . pelo que o tamanho maximo de uma linha é 8060 bytes. As linhas são inseridas na área livre no fim de uma página.. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3...

. uma linha numa Index Page tem a chave do índice e um apontador para a página no nível seguinte. Header Linha 0: Bases de Dados I Engenharia Software 116 96 . Header Linha 0: Bases de Dados I Engenharia Software 0 96 .........01) Pág 8 . Clustered Indexes.. nonleaf pages Cada linha contém a chave do índice e um apontador (fileID e pageAddress) para a proxima página na árvore... Geralmente. Linha n-1: Análise de Sistemas 96+linha*rowlength Eliminação de Engenharia de Software .. Linha n-2: Análise de Sistemas Linha n-1: Bases de Dados II Linha n: Projecto 96+linha*rowlength Inserção de Projecto . Linha n-1: Análise de Sistemas Linha n: Bases de Dados II 96+linha*rowlength Inserção de Bases de Dados II .Bases de Dados II ISEP _________________________________________________________________________________________ Header Linha 0: Bases de Dados I Linha 1: Engenharia Software . _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Header 0 96 Linha 0: Bases de Dados I .. Linha n-1: Análise de Sistemas 96+linha*rowlength ... 116 96 Index Page Uma Index Page tem a mesma estrutura que uma Data Page à excepção do tipo de informação guardada.

Cada coluna deste tipo suporta até 2Gb de dados. tem exactamente a mesma estrutura de uma Data Page. Global Allocation Map Regista os Extents alocados. mas sim em páginas próprias. o que é guardado na Data Page é um apontador (16 byte) para a localização da Text & Image Page.Bases de Dados II ISEP _________________________________________________________________________________________ O Leaf Level de um Clustered Index contém os dados. representa um Extent. Page Address. Cada bit na página. Adicionalmente contém uma referência (RowId) para a Data Row a que a linha do índice se refere. nonleaf pages Cada linha contém a chave do índice e um apontador (fileID e pageAddress) para a proxima página na árvore. conforme a tabela é ou não clustered. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 9 . Text & Image Page Texto e imagens são datatypes associados a objectos que pressupõem grande volume de informação. leaf pages RowID ou Clustered Key. Nonclustered Indexes. à excepção do Header. logo. Para cada valor destas colunas. Texto e imagens não são guardados conjuntamente com os dados da linha associada. Offset Address) o Clustered Tables: Clustered Key Nonclustered Indexes. o Nonclustered Tables: RowID = (File ID. permite saber quais os Extents que estão alocados para objectos e que tipo de Extent se trata (Mixed ou Uniform). onde 1 significa que não está alocado e 0 que está. ou seja. Global Allocation Map Page As Global Allocation Map Pages (GAM) permitem ao SQLServer o controlo do espaço alocado. independentemente de serem ou não uniformes.

Extent GAM bit Livre 1 Uniforme 0 Mixed. A PFS é a primeira página de cada ficheiro. ou então que é um Mixed Extent sem páginas livres. representa um Extent. altera-o para 0 e em seguida altera o bit correspondente na SGAM para 1. 81 a 95%. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Para encontrar um Mixed Extent com páginas livres. à excepção do Header. sem páginas livres 0 Mixed. procura na GAM um bit com 1 (livre) e altera para 0. Cada bit na página.01) Pág 10 . se está de 1 a 50%. Cada PFS cobre 8000 páginas e cada página é um bitmap que indica se a página está live. com páginas livres 0 SGAM bit 0 0 0 1 Quando o SQLServer necessita de alocar um Uniform Extent. 51 a 80%. ou seja 4Gb (8096 * 8 * 64Kb) de dados Shared Global Allocation Map A diferença relativamente ao Global Allocatiom Map é que este controla a alocação do espaço livre em Mixed Extents. Page Free Space Page As PFS registam se as páginas estão alocadas e qual a quantidade de espaço livre. onde 1 significa que é um Mixed Extent e tem espaço livre (pelo menos uma página) e 0 que a página não está alocada.Bases de Dados II ISEP _________________________________________________________________________________________ Cada página representa 64768 extents (8096 * 8). ou seja é um bitmap onde cada bit representa o uso dos Extents. Index Allocation Map Page As Index Allocation Map Pages (IAM) permitem ao SQLServer o controlo do espaço alocado por índices. ou mais de 95% ocupada. procura na GAM um bit com 1. que é um Uniform Extent. A estrutura das IAM é semelhante às GAM.

4. o número mínimo de ficheiros de uma BD é dois pela razão que o Transaction Log é sempre separado dos ficheiros de dados. 64Kb. e por isso. haveria grande fragmentação dos dados das tabelas ou índices. O tamanho maximo de um Data File é 32Tb e de um Log File 4Tb. as páginas associadas a um determinado objecto (tabela ou índice) são agrupadas em Extents. 1.Bases de Dados II ISEP _________________________________________________________________________________________ Extent Se o SQLServer alocasse páginas uma de cada vez quando necessário.1 Master Guarda toda a informação do sistema SQLServer Configuração do sistema Contas dos utilizadores Existência de outras bases de dados _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Todas as 8 páginas pertencem a esse objecto. Para o SQLServer. Cada extent são 8 páginas contíguas. um por cada página.01) Pág 11 . Uniform Extent Pertence a um único objecto. Quando uma tabela ou índice são criados.4 Bases de dados do sistema A base de dados dos sistema é um conjunto de ficheiros que são criados na mesma altura da criação da BD ou à medida que esta vai crescendo. Uma consequência desse facto é que a pesquisa nestas tabelas seria ineficiente. ou seja. 1. Mixed Extent Pode ser partilhado por oito objectos. É a unidade fundamental de espaço para a alocação de tabelas e índices. o SQLServer aloca uma página num Mixed Extent e à medida que a tabela ou índice vai crescendo vai reservando Uniform Extents.

de uma sessão para outra. Preenche outro tipo de necessidades de espaço temporárias. Users. As alterações efectuadas na Master são sempre resultado da inserção ou modificação de registos nas tabelas do sistema. Como todas as tabelas e stored procedures temporários são apagados quando o utilizador desliga a sessão. isto é. User-Defined Datatypes. Os objectos que podem ser adicionados são Tables.Bases de Dados II ISEP _________________________________________________________________________________________ Localização das primary files que contêm a informação de inicialização das bases de dados System Tables System Stored Procedures Mensagens de erro . podemos alterar a Model por forma a optimizar o processo. Defaults. 1.01) Pág 12 . o conteúdo da model é copiado. Se quisermos que determinados objectos sejam criados automaticamente quando se cria uma base de dados.4.. É uma base de dados que tende a ter pouca actividade e normalmente é pequena. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. e essas alterações resultam de: Criação.3 Tempdb A TempDB guarda todas as tabelas e stored procedures temporários. etc. Rules. É recriada de cada vez que o SQL Server é iniciado.4..2 Model A Model é um template para todas as bases de dados. nunca fica nenhuma informação importante na TempDB. todos os utilizadores de todas as bases de dados guardam a sua informação temporária na tempdb. A Master é crítica para o sistema SQLServer. alteração ou eliminação de bases de dados Criação ou eliminação de Logins e Users Criação ou eliminação de Backup Devices Reconfiguração do SQLServer 1. É um recurso global. Quando se cria uma base de dados. e o restante espaço é preenchido com páginas vazias.

são o System Catalog.5 Tabelas do sistema O SQLServer guarda toda a informação respeitante a configuração. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. 1.01) Pág 13 . Algumas dessas tabelas são na verdade Views mas estão documentadas como tabelas.mdf) Todas as bases de dados têm uma primary datafile. A primary datafile é o início da base de dados e aponta para o resto dos ficheiros da mesma. Log files (*. Para identificar uma página na base de dados. O Dicionário de Dados representa dados sobre os dados (metadados) e podemos considerar que é o conjunto de todas as tabelas que representam informação sobre tabelas e todos os restantes objectos no SQLServer. Secondary datafile (*.6 Database Files 1. o SQLServer usa a MsDB para guardar informação sobre backups.Bases de Dados II ISEP _________________________________________________________________________________________ 1.4. é necessário saber o file ID e o número da página. e registo dos Operators. Para cada base de dados. Jobs.6. 1. e contém um determinado número de páginas. Há ainda um conjunto de tabelas que descrevem a configuração do SQLServer.ldf) Guarda toda a informação necessária para recuperar uma base de dados.ndf) Algumas bases de dados podem não ter secondary datafiles enquanto outras podem ter várias. o conjunto de todas as tabelas que a descrevem é chamado o Database Catalog. sendo estas numeradas sequencialmente.4 Msdb A MsDB é usada pelo serviço SQLServerAgent para gerir o escalonamento dos Alerts. Além do SQLServerAgent. Existe pelo menos um log file por base de dados. segurança e objectos nas tabelas do sistema. Cada data file tem um ID number que o identifica unívocamente.1 Data files Primary datafiles (*.

o Primary file group o Contém o primary data file e qualquer outro ficheiro que não seja incluido em nenhum file group. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. o Default file group o Contém páginas para todas as tabelas e índices que não têm file group especificado na altura em que são criadas. o Nenhum data file pode pertencer a mais do que um file group. o Log files nunca podem pertencer a um file group.6.2 Nomes de ficheiros no SQL Server logical_file_name É o nome usado para referir o ficheiro em comandos Transact SQL os_file_name É o nome físico do ficheiro. o default file group torna-se o primary file group.01) Pág 14 . o User defined file group o Qualquer file group especificado usando a keyword FILEGROUP nos comandos CREATE DATABASE ou ALTER DATABASE. File groups o Os data files podem ser agrupados em filegroups para fins administrativos. o Se nenhum default filegroup for especificado.Bases de Dados II ISEP _________________________________________________________________________________________ 1.

Ex..1 Syntax da instrução Grant GRANT {ALL [PRIVILEGES] | permission[. ALL can be used only by members of the sysadmin role.Bases de Dados II ISEP _________________________________________________________________________________________ 2...n])] ON {table | view} | ON {table | view}[(column[. 2. Grant ou Deny. and database object owners. Ex..n])] | ON {stored_procedure | extended_procedure} } TO security_account[... For object permissions. A Microsoft adicionou várias funcionalidades não standard na norma SQL92. For statement permissions. Ex. ALL can be used by members of the sysadmin and db_owner roles. REVOKE INSERT ON customers TO public 2.n] [WITH GRANT OPTION] [AS {group | role}] Arguments ALL Specifies that all applicable permissions are being granted..1. mesmo que esta tenha sido dada num contexto de herança. Introdução ao Transact-SQL O Transact-SQL é uma linguagem que tem como estrutura base o standard ANSI SQL-92 ISO e que permite comunicar com o SQL Server..1 DCL – Data Control Language A DCL contém instruções que permitem alterar as permissões de acesso do utilizador a manipulação de dados : • Grant – Dá permissão ao utilizador para manipular dados e/ou instruções SQL... statement _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Utilizar a base de dados Northwind e executar o seguinte comando: GRANT INSERT ON customers TO public • Deny – Nega a permissão ao utilizador. DENY INSERT ON customers TO public • Revoke – Retira permissões feitas..n]} { [(column[..01) Pág 15 .

or group in another database. role. or UPDATE. If a permission is granted to a SQL Server role or a Windows NT group. the most restrictive permission (DENY) takes precedence. the permissions list can include only EXECUTE. Permissions granted to the guest user are used by all users who do not have a user account in the database. Object permissions granted on a table can also include REFERENCES. • Microsoft Windows NT® user. permission Is an object permission that is being granted. When permissions are granted on stored procedures. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 16 . security_account Is the security account to which the permissions are applied. the permissions list can include SELECT or UPDATE. permissions cannot be granted to a user. • Windows NT group. DELETE. INSERT. TO Specifies the security account list. the specified security_account is the only account affected by the permission. unless the user has already been created or given access to the current database. and object permissions granted on a procedure can include EXECUTE. the permission affects all users in the current database who are members of the group or role. • SQL Server role. security_account must exist in the current database. When a permission is granted to a SQL Server user or Windows NT user account. When permissions are granted on a table or a view. the permission list can include one or more of these statements: SELECT. The security account can be a: • Microsoft® SQL Server™ user. If there are permission conflicts between a group or role and its members. The statement list can include: • CREATE DATABASE • CREATE DEFAULT • CREATE PROCEDURE • CREATE RULE • CREATE TABLE • CREATE VIEW • BACKUP DATABASE • BACKUP LOG n A placeholder indicating that the item can be repeated in a comma-separated list. When permissions are granted on columns. Two special security accounts can be used with GRANT.Bases de Dados II ISEP _________________________________________________________________________________________ Is the statement for which permission is being granted. PRIVILEGES Is an optional keyword that can be included for SQL-92 compliance. Permissions granted to the public role are applied to all users in the database.

column Is the name of a column in the current database for which permissions are being granted. and the object permissions need to be further granted to users who are not members of the group or role.... Because only a user. The WITH GRANT OPTION clause is valid only with object permissions.01) Pág 17 .. 2...2 Syntax da instrução Deny DENY {ALL [PRIVILEGES] | permission[.n] [CASCADE] _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.n])] | ON {stored_procedure | extended_procedure}} TO security_account[. AS is used when permissions on an object are granted to a group or role. SQL Server must validate the data in the column with the data referenced in the FOREIGN KEY constraint. WITH GRANT OPTION Specifies that the security_account is given the ability to grant the specified object permission to the other security accounts.n]} { [(column[.n])] ON {table | view} | ON {table | view}[(column[.Bases de Dados II ISEP _________________________________________________________________________________________ When a user adds a row to a table with a FOREIGN KEY constraint.. the REFERENCES permission for the column must be granted to the user. If the user does not have SELECT permissions on the referenced column or table..1. can execute a GRANT statement. table Is the name of the table in the current database for which permissions are being granted... AS {group | role} Specifies the optional name of the security account in the current database that has the authority to execute the GRANT statement. rather than a group or role. view Is the name of the view in the current database for which permissions are being granted. stored_procedure Is the name of the stored procedure in the current database for which permissions are being granted. The REFERENCES permission cannot be granted for a system table. extended_procedure Is the name of the extended stored procedure for which permissions are being granted.. a specific member of the group or role grants permissions on the object under the authority of the group or role. or changes data in a column with a FOREIGN KEY constraint..

Use the GRANT OPTION FOR keywords with REVOKE to remove the effects of the WITH GRANT OPTION setting specified in the GRANT statement.1.. GRANT OPTION FOR is ignored if specified..n] [CASCADE] [AS {group | role}] Arguments São semelhantes aos descritos atrás para a instrução Deny. If the permissions being revoked were originally granted using the WITH GRANT OPTION setting. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. an error is returned. Use CASCADE when denying a grantable permission. and permissions are revoked as usual.01) Pág 18 .n])] ON {table | view} | ON {table | view}[(column[.. The user still has the permissions.n]} { [(column[. specify both the CASCADE and GRANT OPTION FOR clauses.... com a excepção de : GRANT OPTION FOR Specifies that WITH GRANT OPTION permissions are being removed...n])] | {stored_procedure | extended_procedure} } {TO | FROM} security_account[. If the permissions being revoked were not originally granted using the WITH GRANT OPTION setting.Bases de Dados II ISEP _________________________________________________________________________________________ Arguments São semelhantes aos descritos atrás para a instrução Grant.. but cannot grant the permissions to other users. com a excepção de : CASCADE Specifies that permissions are being denied from security_account as well as any other security accounts granted permissions by security_account. 2. an error is returned. otherwise. If CASCADE is not specified and the specified user is granted WITH GRANT OPTION permission....3 Syntax da instrução Revoke REVOKE [GRANT OPTION FOR] {ALL [PRIVILEGES] | permission[.

Depois da variável ser declarada.2 DDL – Data Definition Language A DDL contém instruções que permitem criar.1.Bases de Dados II ISEP _________________________________________________________________________________________ 2. como por exemplo : • Select – Permite seleccionar dados • Insert – Permite inserir dados • Update – Permite alterar dados • Delete – Permite apagar dados Ex.4.4. etc.1 Variáveis 2. funções.4 Variáveis. operadores. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. 2. operadores. Nome Varchar(40)) DROP TABLE aluno 2.3 DML – Data Manipulation Language A DML contém instruções que permitem manipular os dados da BD. SELECT * FROM customers 2.1 Variáveis locais Uma variável no T-SQL é um objecto que consegue guardar um determinado valor durante um processamento. alterar e apagar tabelas e bases de dados. uma instrução T-SQL pode atribuir-lhe um valor. Mais tarde uma outra instrução pode ir buscar o seu valor. CREATE TABLE aluno (NAluno int.01) Pág 19 . • Create – Permite criar • Alter – Permite alterar • Drop – Permite apagar Ex. funções e instruções de controlo Existem instruções adicionais que facilitam toda a gestão de dados. tais como variáveis.

1. SELECT @@VERSION @@CONNECTIONS (T-SQL) Returns the number of connections or attempted connections since Microsoft® SQL Server™ was last started. Microsoft® SQL Server™ can populate large keyset and static cursors asynchronously. Because dynamic cursors reflect all changes. Ex. It can never be definitely stated that all qualified rows have been retrieved. no rows qualified for the last opened cursor. @@CURSOR_ROWS (T-SQL) Returns the number of qualifying rows that are currently in the last cursor opened on the connection. DECLARE @Cidade Varchar(40) SET @Cidade = 'London' SELECT * FROM customers WHERE City = @Cidade 2. que se distinguem das locais por terem no início os símbolos @@.01) Pág 20 . the number -1 of rows that qualify for the cursor is constantly changing.Bases de Dados II ISEP _________________________________________________________________________________________ Ex. or 0 the last-opened cursor is closed or deallocated. @@CPU_BUSY (T-SQL) Returns the time in milliseconds (based on the resolution of the system timer) that the CPU has spent doing work since Microsoft® SQL Server™ was last started. Return Description value The cursor is being populated asynchronously. The cursor is fully populated. To improve performance.4. The value returned (n) is the total number of rows n in the cursor. No cursors have been opened. @@CURSOR_ROWS can be called to determine the number of the rows that qualify for a cursor have been retrieved at the time @@CURSOR_ROWS is called. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. The value returned (-m) is the -m number of rows currently in the keyset.2 Variáveis globais São variáveis previamente declaradas pelo sistema. The cursor is dynamic.

Return Description value 0 FETCH statement was successful. This timestamp is guaranteed to be unique in the database. -2 Row fetched is missing.01) Pág 21 . which indicates the specified first day of each week: 1 for Monday. and so on through 7 for Sunday. for the current session. @@MAX_PRECISION (T-SQL) Returns the level of precision used by decimal and numeric data types as currently set in the server. @@LOCK_TIMEOUT (T-SQL) Returns the current lock time-out setting. The number returned is not necessarily the number that is currently configured. @@IDLE (T-SQL) Returns the time in milliseconds (based on the resolution of the system timer) that Microsoft® SQL Server™ has been idle since it was last started. @@IDENTITY (T-SQL) Returns the last-inserted identity value. @@DBTS (T-SQL) Returns the value of the current timestamp data type for the current database. @@LANGID (T-SQL) Returns the local language ID of the language currently in use.Bases de Dados II ISEP _________________________________________________________________________________________ @@DATEFIRST (T-SQL) Returns the current value of the SET DATEFIRST parameter. @@LANGUAGE (T-SQL) Returns the name of the language currently in use. @@FETCH_STATUS (T-SQL) Returns the status of the last cursor FETCH statement issued against any cursor currently opened by the connection. FETCH statement failed or the row was beyond the result -1 set. in milliseconds. @@ERROR (T-SQL) Returns the error number for the last Transact-SQL statement executed. @@IO_BUSY (T-SQL) Returns the time in milliseconds (based on the resolution of the system timer) that Microsoft® SQL Server™ has spent doing input and output operations since it was last started. 2 for Wednesday. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. @@MAX_CONNECTIONS (T-SQL) Returns the maximum number of simultaneous user connections allowed on a Microsoft® SQL Server™.

@@SERVICENAME (T-SQL) Returns the name of the registry key under which Microsoft® SQL Server™ is running. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. @@TOTAL_ERRORS (T-SQL) Returns the number of disk read/write errors encountered by Microsoft® SQL Server™ since it was last started.Bases de Dados II ISEP _________________________________________________________________________________________ @@NESTLEVEL (T-SQL) Returns the nesting level of the current stored procedure execution (initially 0). @@ROWCOUNT (T-SQL) Returns the number of rows affected by the last statement. @@SPID (T-SQL) Returns the server process ID of the current user process. which specifies the maximum length. @@SERVERNAME (T-SQL) Returns the name of the local server running Microsoft® SQL Server™. in bytes. @@OPTIONS (T-SQL) Returns information about current SET options. @@TIMETICKS (T-SQL) Returns the number of microseconds per tick. @@PACK_RECEIVED (T-SQL) Returns the number of input packets read from the network by Microsoft® SQL Server™ since it was last started. of text or image data that a SELECT statement returns. @@TEXTSIZE (T-SQL) Returns the current value of the TEXTSIZE option of the SET statement. @@PACKET_ERRORS (T-SQL) Returns the number of network packet errors that have occurred on Microsoft® SQL Server™ connections since the last time SQL Server was started. @@PACK_SENT (T-SQL) Returns the number of output packets written to the network by Microsoft® SQL Server™ since it was last started. @@PROCID (T-SQL) Returns the stored procedure ID of the current procedure @@REMSERVER (T-SQL) Returns the name of the remote Microsoft® SQL Server™ database server as it appears in the login record.01) Pág 22 .

UnitPrice * UnitsInStock FROM Products Operator + (Add) – (Subtract) * (Multiply) / (Divide) % (Modulo) Meaning Addition.4. For example. SELECT ProductName.1 Operadores aritméticos Permitem efectuar cálculos aritméticos sobre valores isolados ou campos da BD. Ex.Bases de Dados II ISEP _________________________________________________________________________________________ @@TOTAL_READ (T-SQL) Returns the number of disk reads (not cache reads) by Microsoft® SQL Server™ since it was last started. @@TRANCOUNT (T-SQL) Returns the number of active transactions for the current connection. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. and processor type for the current installation of Microsoft® SQL Server™.01) Pág 23 . @@VERSION (T-SQL) Returns the date. 2.4. @@TOTAL_WRITE (T-SQL) Returns the number of disk writes by Microsoft® SQL Server™ since it was last started.2. Multiplication.2 Operadores O SQL Server tem vários tipos de operadores para manipulação de expressões. Os principais são : • Aritméticos • Comparação • Lógicos • Concatenação de strings 2. 12 % 5 = 2 because the remainder of 12 divided by 5 is 2. Division. version. Subtraction. Returns the integer remainder of a division.

TRUE if the operand matches a pattern.2. 2. SELECT * FROM Employees WHERE employeeID > 5 Operator = (Equals) > (Greater Than) < (Less Than) >= (Greater Than or Equal To) <= (Less Than or Equal To) <> (Not Equal To) != (Not Equal To) !< (Not Less Than) !> (Not Greater Than) Meaning Equal to. Not equal to (not SQL-92 standard).3 Operadores lógicos Os operadores lógicos testam se uma condição é ou não verdadeira. SELECT * FROM Employees WHERE employeeID BETWEEN 3 AND 5 Operator ALL AND ANY BETWEEN EXISTS IN LIKE NOT OR SOME Meaning TRUE if all of a set of comparisons are TRUE. SELECT Firstname + ' ' + Lastname AS Nome FROM Employees _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Ex.4 Operador para concatenação de strings (operador +) O operador + permite concatenar várias strings numa única. TRUE if the operand is equal to one of a list of expressions. Less than or equal to. TRUE if a subquery contains any rows.4. Not less than (not SQL-92 standard). strings e datas. Not equal to. Greater than. Ex. TRUE if both Boolean expressions are TRUE. 2.01) Pág 24 . Greater than or equal to.4. Reverses the value of any other Boolean operator. TRUE if some of a set of comparisons are TRUE.2. TRUE if the operand is within a range. Less than.2.4. TRUE if either Boolean expression is TRUE.Bases de Dados II ISEP _________________________________________________________________________________________ 2. TRUE if any one of a set of comparisons are TRUE.2 Operadores para comparações Existem operadores que permitem comparar valores numéricos. Ex.

SELECT AVG(UnitPrice) FROM products Function SUM([ALL | DISTINCT] expression AVG([ALL | DISTINCT] expression COUNT([ALL | DISTINCT] expression COUNT(*) MAX(expression) MIN(expression) Meaning Total of the values in the numeric expression Average of the values in the numeric expression Number of values in the expression Number of selected rows Highest value in the expression Lowest value in the expression 2. os principais grupos são as de agregação.3.01) Pág 25 . um valor numérico.4. 2.2 Funções de data e hora Executam operações em datas e horas e retornam uma string.4. matemáticas.3. de strings e as de sistema. Ex. de segurança. de metadata. uma data ou horas.3 Funções O SQL Server tem vários tipos de funções para manipulação de dados.Bases de Dados II ISEP _________________________________________________________________________________________ 2.4.1 Funções de agregação Efectuam cálculos num conjunto de valores e retornam um único valor. Ex. de data e hora. SELECT GETDATE() DATEADD DATEDIFF DATENAME DATEPART DAY GETDATE MONTH YEAR _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.

01) Pág 26 . Ex.3. SELECT COL_LENGTH('categories'. Ex.Bases de Dados II ISEP _________________________________________________________________________________________ 2.4.4 Funções de metadata Retornam informação acerca da base de dados e dos seus objectos.4.3 Funções matemáticas Permitem efectuar cálculos matemáticos sobre valores ou campos da base de dados. 'categoryname') COL_LENGTH COL_NAME COLUMNPROPERTY DATABASEPROPERTY DB_ID DB_NAME FILE_ID FILE_NAME FILEGROUP_ID FILEGROUP_NAME FILEGROUPPROPERTY FILEPROPERTY FULLTEXTCATALOGPROPERTY FULLTEXTSERVICEPROPERTY INDEX_COL INDEXPROPERTY OBJECT_ID OBJECT_NAME OBJECTPROPERTY @@PROCID TYPEPROPERTY _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.3. SELECT PI() ABS ACOS ASIN ATAN ATN2 CEILING COS COT DEGREES EXP FLOOR LOG LOG10 PI POWER RADIANS RAND ROUND SIGN SIN SQUARE SQRT TAN 2.

5 Funções de segurança Retornam informações acerca de utilizadores ou grupos de utilizadores.3.4. SELECT SUSER_NAME() IS_MEMBER IS_SRVROLEMEMBER SUSER_ID SUSER_NAME SUSER_SID SUSER_SNAME USER_ID USER 2.3. SELECT SYSTEM_USER _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.Bases de Dados II ISEP _________________________________________________________________________________________ 2. Ex.01) Pág 27 . SELECT FirstName. Ex. Len(FirstName) FROM Employees ASCII CHAR CHARINDEX DIFFERENCE LEFT LEN LOWER LTRIM NCHAR PATINDEX REPLACE QUOTENAME REPLICATE REVERSE RIGHT RTRIM SOUNDEX SPACE STR STUFF SUBSTRING UNICODE UPPER 2.4.6 Funções de strings Efectuam operações em strings e retornam uma string ou um valor numérico.4.7 Funções de sistema Retornam valores que estão relacionados com valores. Ex.3. ou objectos do sistema.

Exits the innermost WHILE loop. IF (SELECT UnitsInStock FROM products WHERE ProductID = 1) <= 0 PRINT 'Não existe stock' ELSE PRINT 'Existe stock' Defines a statement block.ELSE is FALSE. WHILE Repeats statements while a specific condition is TRUE...Bases de Dados II ISEP _________________________________________________________________________________________ APP_NAME CASE CAST and CONVERT COALESCE CURRENT_TIMESTAMP CURRENT_USER DATALENGTH @@ERROR FORMATMESSAGE GETANSINULL HOST_ID HOST_NAME IDENT_INCR IDENT_SEED @@IDENTITY IDENTITY (Function) ISDATE ISNULL ISNUMERIC NEWID NULLIF PARSENAME PERMISSIONS @@ROWCOUNT SESSION_USER STATS_DATE SYSTEM_USER @@TRANCOUNT USER_NAME 2..4..*/ (Comment) EXECUTE -. Other Transact-SQL statements that can be used with control-of-flow language statements are: /*.(Comment) PRINT CASE RAISERROR DECLARE @local_variable _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. and optionally.01) Pág 28 Keyword BEGIN.END BREAK CONTINUE Description . alternate execution when a condition IF. Restarts a WHILE loop. Continues processing at the statement following the label as defined by GOTO label label. Ex. Defines conditional. RETURN Exits unconditionally.4 Elementos de controlo Permitem controlar o fluxo dos dados na execução de instruções T-SQL... WAITFOR Sets a delay for statement execution.

5 Modos de execução do T-SQL Existem várias opções para executar instruções T-SQL que variam conforme a necessidade do utilizador : dinamicamente. Ex. em script e utilizando transações. ou seja.1 T-SQL Dinâmico É possível construir instruções SQL em run-time e executa-las através da instrução EXEC[UTE]. Se num conjunto de instruções acontecer um erro. em batch.01) Pág 29 . No entanto no momento da execução o compilador não detecta possíveis alterações a colunas. então as instruções seguintes não serão executadas. Cada batch é compilado e optimizado num único plano de execução. SELECT * FROM products WHERE ProductID = 3 SELECT * FROM products WHERE ProductID > 3 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. DECLARE @SQLString NVARCHAR(500) DECLARE @Tabela NVARCHAR(50) SET @Tabela = 'products' SET @SQLString = 'select * from ' + @tabela EXEC (@SQLString) 2.5.5. Ex.2 Batch Um batch é um conjunto de uma ou mais instruções SQL que são enviadas como uma só para serem processadas.Bases de Dados II ISEP _________________________________________________________________________________________ 2. no mesmo batch não pode existir uma linha a alterar o nome de uma coluna e na linha seguinte uma instrução de selecção com o novo nome da coluna. 2.

3 Scripts Um script é um conjunto de batches que podem ser guardados num ficheiro em disco e que podem ser executados no Query Analyzer. 2. essas instruções são desfeitas. Se acontecer um erro após a execução de algumas instruções. no OSQL ou outro utilitário SQL.01) Pág 30 . pois a variável não existe. não existe o meio termo.5.Bases de Dados II ISEP _________________________________________________________________________________________ 2. Ex. Ex. São muito utilizados para guardas a estrutura de dados da BD. UPDATE products SET ProductName = NULL WHERE ProductID = 2 IF (@@Error >0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. BEGIN TRANSACTION UPDATE products SET ProductName = 'Novo Nome' WHERE ProductID = 1. ou com ROLLBACK TRANSACTION quando algo corre mal. O fim de cada batch é assinalado pela instrução GO. variáveis). ou seja. DECLARE @SQLString NVARCHAR(500) SET @SQLString = 'select * from categories' EXEC (@SQLString) GO EXEC (@SQLString Nota : Dá um erro no segundo script.5. ou é executado completamente ou não. o que implica que todas as instruções de um batch não tenham nenhuma relação com o batch seguinte (ex.4 Transações Uma transação é interpretada como um único comando (apesar de poderem ser várias instruções SQL). A transação é iniciada com a instrução BEGIN TRANSACTION e é terminada com COMMIT TRANSACTION quando tudo correu bem.

etc. MAXSIZE = 30.2 Criar. e outros objectos (views. indexes. SIZE = 10. SIZE = 5MB. tais como guardar informação. alterar dados. FILEGROWTH = 5 ) LOG ON ( NAME = 'GestaoLog'.1 Introdução Uma base de dados no SQL Server consiste num conjunto de tabelas que permitem guardar dados numa forma estruturada. 3.Bases de Dados II ISEP _________________________________________________________________________________________ 3.01) Pág 31 . etc.mdf'. FILENAME = 'c:\Projecto\BD\GestaoLog. stored procedures. FILENAME = 'c:\Projecto\BD\GestaoDat. CREATE DATABASE Gestao ON ( NAME = GestaoDat.) que permitem facilitar toda as actividades da base de dados. Criação da BD 3.ldf'. aceder a informação. MAXSIZE = 15MB. FILEGROWTH = 5MB ) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. alterar e apagar uma BD Ex. triggers.

Database names must be unique within a server and conform to the rules for identifiers.. ] FILENAME = 'os_file_name' [... database_name can be up to 128 characters.. This limits database_name to 123 characters so that the generated logical log file name is less than 128 characters.n] Arguments database_name Is the name of the new database. FILEGROWTH = growth_increment] ) [... The keyword is followed by a comma-delimited list of <filespec> items defining the data files for the primary filegroup.n] <filegroup> ::= FILEGROUP filegroup_name <filespec> [. If no logical log file name is specified.01) Pág 32 . unless no logical name is specified for the log.. The list of files in the primary filegroup can be followed by an optional. MAXSIZE = { max_size | UNLIMITED } ] [.. Microsoft® SQL Server™ generates a logical name by appending a suffix to database_name. ALTER DATABASE Gestao MODIFY FILE (NAME = Gestaodat.Bases de Dados II ISEP _________________________________________________________________________________________ Ex.. SIZE = size] [....n] ] [. <filegroup> [. ON Specifies that the disk files used to store the data portions of the database (data files) are defined explicitly. comma-delimited list of <filegroup> items defining user filegroups and their files.n] ] ] [ LOG ON { <filespec> [. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3...n]} ] [ FOR LOAD | FOR ATTACH ] <filespec> ::= ( [ NAME = logical_file_name.. DROP DATABASE Gestao Syntax CREATE DATABASE database_name [ ON [PRIMARY] [ <filespec> [. SIZE = 10MB) Ex.

NAME Specifies the logical name for the file defined by the <filespec>. and the status is set to loading. There must be a <filespec> entry specifying the first primary file. you should run sp_removedbreplication to remove replication from the database.01) Pág 33 . LOG ON Specifies that the disk files used to store the database log (log files) are explicitly defined. If PRIMARY is not specified.Bases de Dados II ISEP _________________________________________________________________________________________ PRIMARY Specifies that the associated <filespec> list defines the primary file. The database being attached must have been created using the same code page and sort order as SQL Server. Use the sp_attach_db system stored procedure instead of using CREATE DATABASE FOR ATTACH directly. A database can have only one primary file. If you attach a database to a server other than the server from which the database was detached. a single log file is automatically created with a system-generated name and a size that is 25 percent of the sum of the sizes of all the data files for the database. It also contains all objects not assigned to user filegroups. The first <filespec> entry in the primary filegroup becomes the primary file. The primary filegroup contains all of the database system tables. or a regular or delimited identifier. FILENAME Specifies the operating-system file name for the file defined by the <filespec>. This is not needed in SQL Server version 7. The name can be a character or Unicode constant. A <filespec> entry must be specified for these files. The path in os_file_name must specify a directory on the _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. and the detached database was enabled for replication. The only other <filespec> entries needed are those for any files that have a different path from when the database was first created or last attached. FOR LOAD This clause is supported for compatibility with earlier versions of Microsoft SQL Server. The NAME parameter is not required when FOR ATTACH is specified. n Is a placeholder indicating that multiple files can be specified for the new database. The keyword is followed by a comma-delimited list of <filespec> items defining the log files. The database is created with the dbo use only database option turned on. logical_file_name must be unique in the database and conform to the rules for identifiers. Use CREATE DATABASE FOR ATTACH only when you must specify more than 16 <filespec> items. logical_file_name Is the name used to reference the file in any Transact-SQL statements executed after the database is created. which is the file containing the logical start of the database and its system tables.0 because the RESTORE statement can re-create a database as part of the restore operation. If LOG ON is not specified. 'os_file_name' Is the path and file name used by the operating system when it creates the physical file defined by the <filespec>. the first file listed in the CREATE DATABASE statement becomes the primary file. FOR ATTACH Specifies that a database is attached from an existing set of operating system files.

KB. Specify a whole number. If size is not specified. If max_size is not specified.Bases de Dados II ISEP _________________________________________________________________________________________ server in which SQL Server is installed. FILEGROWTH Specifies the growth increment of the file defined in the <filespec>. the default is MB. SQL Server makes the file 1 MB. the default is MB. do not include a decimal. KB. Specify a whole number. or %. or % suffix. When a SIZE parameter is not specified in the <filespec> for a secondary or log file. growth_increment Is the amount of space added to the file each time new space is needed. the MAXSIZE and FILEGROWTH parameters are not needed when os_file_name specifies a raw partition. max_size Is the maximum size to which the file defined in the <filespec> can grow. The KB and MB suffixes can be used to specify kilobytes or megabytes. the file grows until the disk is full. SIZE Specifies the size of the file defined in the <filespec>. A value of 0 indicates no growth. the default value is 10% and the minimum value is 64 KB. The size specified for the primary file must be at least as large as the primary file of the model database. The KB and MB suffixes can be used to specify kilobytes or megabytes. Only one file can be created on each raw partition. therefore. If FILEGROWTH is not specified. Specify a whole number. the default is 1 MB. The size specified is rounded to the nearest 64 KB. size Is the initial size of the file defined in the <filespec>. When % is specified. os_file_name cannot specify a directory in a compressed file system. The value can be specified in MB. If a number is specified without an MB. the growth increment size is the specified percentage of the size of the file at the time the increment occurs. If the file is being created on a raw partition. When a SIZE parameter is not supplied in the <filespec> for a primary file. do not include a decimal. The minimum value for size is 512 KB. os_file_name must specify only the drive letter of an existing raw partition. UNLIMITED Specifies that the file defined in the <filespec> grows until the disk is full. Files on raw partitions do not autogrow. The FILEGROWTH setting for a file cannot exceed the MAXSIZE setting. SQL Server uses the size of the primary file in the model database. MAXSIZE Specifies the maximum size to which the file defined in the <filespec> can grow. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. the default is MB.01) Pág 34 . do not include a decimal.

2 Tipos de dados Para criação de tabelas existem vários tipos de dados (numéricos.3647.647) characters. Tinyint Integer data from 0 through 255. etc. Variable-length binary data with a maximum length of 2^31 . TimeStamp A database-wide unique number.203.79E + 308.147.741.000 Char characters.3648 through +214. Nchar Fixed-length Unicode data with a maximum length of 4.685.40E + 38.823) characters. Variable-length Unicode data with a maximum length of 4. strings.647). Real Floating precision number data from -3. to December 31. or 3.01) Pág 35 Name .073.5808) through Money 2^63 . with an Smalldatetime accuracy of one minute.748. Varchar Variable-length non-Unicode data with a maximum of 8. with accuracy to a ten-thousandth of a monetary unit.147. Binary Fixed-length binary data with a maximum length of 8.1 (+922.483. through June 6. UniqueIdentifier A globally unique identifier (GUID).1 Image (2.147.1 Ntext (1. Nvarchar sysname is a system-supplied user-defined data type that is a synonym for nvarchar(128) and is used to reference database object names. Date and time data from January 1.1 Tipo de dados pré-definidos Meaning Integer data with either a 1 or 0 value. Variable-length non-Unicode data with a maximum length of 2^31 .477. Date and time data from January 1. 3. Existe também a possibilidade de criar novos tipos de dados baseados nos que já existem.767).1 (32. Float Floating precision number data from -1.Bases de Dados II ISEP _________________________________________________________________________________________ 3.685.2.40E + 38 through 3.1 Int (2.000 characters. Smallint Integer data from 2^15 (-32.79E + 308 through 1.337.000 characters.748.5807). Integer (whole number) data from -2^31 (-2. Monetary data values from -214.) que podem ser utilizados.203.000 characters. Variable-length Unicode data with a maximum length of 2^30 . 1753. with an Datetime accuracy of three-hundredths of a second. Varbinary Variable-length binary data with a maximum length of 8.483.647) bytes Bit _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.483. 9999.477.000 bytes. Monetary data values from -2^63 (-922. 1900.1 Text (2.000 bytes. with Smallmoney accuracy to a ten-thousandth of a monetary unit.768) through 2^15 .648) through 2^31 . Decimal Fixed precision and scale numeric data from -10^38 -1 through 10^38 -1.483.33 milliseconds. Fixed-length non-Unicode character data with a maximum length of 8.337.147. Numeric A synonym for decimal. 2079.

2 Tipo de dados definidos pelo utilizador Ex. and must be enclosed in single quotation marks (‘NULL’. with no default. or ‘NONULL’).Bases de Dados II ISEP _________________________________________________________________________________________ 3. data type (decimal. s Is a nonnegative integer indicating the maximum number of decimal digits that can be stored to the right of the decimal point. ‘NOT NULL’. with a default of NULL. EXEC sp_addtype MyString. system_data_type is sysname. ‘varchar(10)’ Syntax sp_addtype [@typename =] type. [@phystype =] system_data_type Is the physical. s])]’ ‘numeric[(p[. [@nulltype =] ‘null_type’ Indicates the way the user-defined data type handles null values. see decimal and numeric. or Microsoft® SQL Server™-supplied. null_type is varchar(8). n Is a nonnegative integer indicating the length for the chosen data type p Is a nonnegative integer indicating the maximum total number of decimal digits that can be stored. both to the left and to the right of the decimal point. If null_type is not explicitly defined by sp_addtype. and can be one of these values: ‘binary(n)’ image Smalldatetime bit int Smallint ‘char(n)’ ‘nchar(n)’ Text datetime ntext Tinyint decimal numeric Uniqueidentifier ‘decimal[(p[.2. Data type names must follow the rules for identifiers and must be unique in each database. with no default. type is sysname. Use the GETANSINULL system _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. and so on) on which the user-defined data type is based.01) Pág 36 . [@nulltype =] 'null_type'] Arguments [@typename =] type Is the name of the user-defined data type. [@phystype =] system_data_type [. int. it is set to the current default nullability. For more information. s])]’ ‘varbinary(n)’ ‘nvarchar(n)’ ‘varchar(n)’ float ‘float(n)’ real Quotation marks are required around all parameters that have embedded blank spaces or punctuation marks. and it must be less than or equal to the precision.

ex.Bases de Dados II ISEP _________________________________________________________________________________________ function to determine the current default nullability. • 1 index clustered(ordem física de armazenamento) e 249 não clustered 3. alterar e apagar tabelas Ex. em que cada coluna tem que ter um nome único na tabela. which can be adjusted by using the SET statement or sp_dboption. ALTER TABLE Cliente ADD Pais int Ex. EXEC sp_droptype MyString 3.3 Tabelas As tabelas são objectos da BD que contêm os dados. Nome nvarchar(60)) Ex. Podem existir nomes de colunas iguais em tabelas diferentes. No SQL Server é possível : • Existirem mais de 2 biliões de tabelas • 1024 colunas em cada tabela • 8060 bytes por coluna. que podem ter mais. DROP TABLE Cliente _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Nullability should be explicitly defined.01) Pág 37 . Para cada coluna é necessário definir o tipo de dados que vai suportar e se aceita ou não valores nulos.1 Criar. Uma tabela é um conjunto de colunas. CREATE TABLE Cliente (Codigo int.3. Nota : Para apagar utiliza-se a stored procedure sp_droptype. excepto para os tipos image e text.

. ] table_name ( { <column_definition> | column_name AS computed_column_expression | <table_constraint> } [....01) Pág 38 ..n] ) [ON {filegroup | DEFAULT} ] [TEXTIMAGE_ON {filegroup | DEFAULT} ] <column_definition> ::= { column_name data_type } [ [ DEFAULT constant_expression ] | [ IDENTITY [(seed.. | owner. increment ) [NOT FOR REPLICATION] ] ] ] [ ROWGUIDCOL ] [ <column_constraint>] [ .n] <column_constraint> ::= [CONSTRAINT constraint_name] { [ NULL | NOT NULL ] | [ { PRIMARY KEY | UNIQUE } [CLUSTERED | NONCLUSTERED] [WITH FILLFACTOR = fillfactor] [ON {filegroup | DEFAULT} ]] ] | [ [FOREIGN KEY] REFERENCES ref_table [(ref_column) ] [NOT FOR REPLICATION] ] | CHECK [NOT FOR REPLICATION] (logical_expression) } <table_constraint> ::= [CONSTRAINT constraint_name] { [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED] { ( column[...[owner].n] ) } [ WITH FILLFACTOR = fillfactor] _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.Bases de Dados II ISEP _________________________________________________________________________________________ Syntax CREATE TABLE [ database_name.

. A computed column is a virtual column not physically stored in the table. table_name Is the name of the new table. Tables created by any logins not in either of these two roles have owner default to the user ID associated with the login. tables created by these users default to having dbo as the owner. table_name can contain up to 128 characters. Members of the sysadmin fixed server role. The combination of owner. owner can specify a user ID other than the one associated with the login of the current connection. a computed column can have the _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. For example. owner must be an existing user ID in the database specified by database_name.. database_name defaults to the current database if it is not specified. column_name Is the name of a column in the table.table_name must be unique within the database. column_name can be omitted for columns created with a timestamp data type. except for local temporary table names (names prefixed with a single number sign (#)) that cannot exceed 116 characters. therefore. owner Is the name of the user ID that owns the new table.01) Pág 39 . The name of a timestamp column defaults to timestamp if column_name is not specified. Column names must conform to the rules for identifiers and must be unique in the table. owner must specify the user ID associated with the current login. computed_column_expression Is an expression defining the value of a computed column... Table names must conform to the rules for identifiers. the database owner. database_name must specify the name of an existing database.Bases de Dados II ISEP _________________________________________________________________________________________ [ON {filegroup | DEFAULT} ] ] | FOREIGN KEY [(column[. or a member of the db_dbowner or db_ddladmin fixed database roles in the database specified by database_name. It is computed from an expression using other columns in the same table..n])] REFERENCES ref_table [(ref_column[. owner defaults to the user ID associated with the login for the current connection in the database specified in database_name. If the CREATE TABLE statement is executed by a login associated with a user ID that has been granted only create table privileges.. and that user ID must have create table privileges. If the CREATE TABLE statement is executed by a member of the sysadmin fixed server role.n])] [NOT FOR REPLICATION] | CHECK [NOT FOR REPLICATION] (search_conditions) } Arguments database_name Is the name of the database in which the table is created. The login for the current connection must be associated with an existing user ID in the database specified by database_name. or logins aliased to the dbo user are associated with the user ID dbo.

a system function. ON {filegroup | DEFAULT} Specifies the filegroup on which the table is stored. DEFAULT Specifies the value provided for the column when a value is not explicitly supplied during an insert. If filegroup is specified. the index is stored on the same filegroup as the table. If no filegroup is specified in a constraint. such as SYSTEM_USER(). Only a constant value. function. NULL. the table is stored in the named filegroup. incremental value for the column.Bases de Dados II ISEP _________________________________________________________________________________________ definition: cost AS price * qty. the index is stored in the named filegroup. FOREIGN KEY. If the PRIMARY KEY or UNIQUE constraint creates a clustered index. or any other locations in which regular expressions can be used. The NULL/NOT NULL assignment for a user-defined data type can be overridden during the CREATE TABLE statement. variable. ORDER BY clauses. and image columns are stored in the same filegroup as the table. the table is stored on the default filegroup. the length specification cannot be changed. To maintain compatibility with earlier versions of SQL Server. ntext.01) Pág 40 . or if ON is not specified at all. • A computed column cannot be the target of an INSERT or UPDATE statement. Computed columns can be used in select lists. However. such as a character string. System or user-defined data types are acceptable. The expression can be a noncomputed column name. data_type Specifies the data type of the column. or NULL can be used as a default. Microsoft® SQL Server™ provides a unique. The filegroup must exist within the database. the text. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. or a system function used as the default value for the column. These constraints create indexes. TEXTIMAGE_ON Are keywords indicating that the text. constant. you cannot specify a length for a user-defined data type in a CREATE TABLE statement. When a new row is added to the table. ntext. ntext. the index is stored in the default filegroup. constant_expression Is a constant. TEXTIMAGE ON is not allowed if there are no text. If DEFAULT is specified. The expression cannot be a subquery. IDENTITY Indicates that the new column is an identity column. If filegroup is specified. or image columns in the table. User-defined data types are created with sp_addtype before they can be used in a table definition. and image columns are stored on the specified filegroup. If TEXTIMAGE_ON is not specified. ON {filegroup | DEFAULT} can also be specified in a PRIMARY KEY or UNIQUE constraint. WHERE clauses. UNIQUE. and any combination of these connected by one or more operators. with the following exceptions: • A computed column cannot be used as a key column in an index or as part of any PRIMARY KEY. DEFAULT definitions are removed when the table is dropped. the data pages for the table are stored in the same filegroup as the index. DEFAULT definitions can be applied to any columns except those defined as timestamp. or those with the IDENTITY property. a constraint name can be assigned to a DEFAULT. If DEFAULT is specified. or DEFAULT constraint definition.

int. constraint_name Is the name of a constraint. The ROWGUIDCOL property does not enforce uniqueness of the values stored in the column. decimal(p. or numeric(p. Only one identity column can be created per table. FOREIGN KEY.0). It also does not automatically generate values for new rows inserted into the table. but can be specified in the same manner as NOT NULL. To generate unique values for each column. NOT FOR REPLICATION Indicates that the IDENTITY property should not be enforced when a replication login such as sqlrepl inserts data into the table. increment Is the incremental value that is added to the identity value of the previous row that was loaded.Bases de Dados II ISEP _________________________________________________________________________________________ Identity columns are commonly used in conjunction with PRIMARY KEY constraints to serve as the unique row identifier for the table.0) columns.1). smallint. The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. PRIMARY KEY Is a constraint that enforces entity integrity for a given column or columns through a unique index. NULL is not strictly a constraint. UNIQUE Is a constraint that provides entity integrity for a given column or columns through a unique index. If neither is specified. Replicated rows must retain the key values they were assigned in the publishing database. It is recommended that a CHECK constraint with NOT FOR REPLICATION also be defined to ensure that the identity values being assigned are within the range wanted for the current database. Constraint names must be unique within a database. UNIQUE. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. the default is (1. The ROWGUIDCOL keyword is not valid if the database compatibility level is 65 or lower. Constraints are special properties that enforce data integrity and create special types of indexes for the table and its columns. Rows inserted by other logins continue to have new identity values created in the usual way. Bound defaults and DEFAULT constraints cannot be used with an identity column. NOT NULL. A table can have multiple UNIQUE constraints. You must specify both the seed and increment or neither. or CHECK constraint definition. NULL | NOT NULL Are keywords that determine whether or not null values are allowed in the column. either use the NEWID function on INSERT statements or use the NEWID function as the default for the column. CONSTRAINT Is an optional keyword indicating the beginning of a PRIMARY KEY. seed Is the value that is used for the very first row loaded into the table. the NOT FOR REPLICATION clause ensures that rows inserted by a replication process are not assigned new identity values. The IDENTITY property can be assigned to tinyint. Only one PRIMARY KEY constraint can be created per table. ROWGUIDCOL Indicates that the new column is a row global unique identifier column.01) Pág 41 . Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column.

however. [WITH FILLFACTOR = fillfactor] Specifies how full SQL Server should make each index page used to store the index data. (ref_column[. column Is a column.01) Pág 42 . When tables are Subscribers to a replication publication. the CHECK constraint also prevents the replication process from distributing modifications from the publishing table to the subscribing table. n Is a placeholder indicating that the preceding item can be repeated n number of times. from the table referenced by the FOREIGN KEY constraint. do not update the subscription table directly. FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column(s) in the referenced table. CHECK Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. ref_table Is the name of the table referenced by the FOREIGN KEY constraint. The NOT FOR REPLICATION CHECK constraint is applied to both the before and after image of an updated record to prevent records from being added to or deleted from the replicated range.. in parentheses used in table constraints to indicate the columns that are used in the constraint definition. FOREIGN KEY constraints can reference only columns that are PRIMARY KEY or UNIQUE constraints in the referenced table... You can specify CLUSTERED for only one constraint in a CREATE TABLE statement.. or list of columns. All deletes and inserts are checked. PRIMARY KEY constraints default to CLUSTERED and UNIQUE constraints default to NONCLUSTERED. logical_expression Is a logical expression that returns TRUE or FALSE. and let replication distribute the data back to the subscribing table. the PRIMARY KEY defaults to NONCLUSTERED.Bases de Dados II ISEP _________________________________________________________________________________________ CLUSTERED | NONCLUSTERED Are keywords to indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. instead update the publishing table. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. User-specified fillfactor values can be from 1 through 100. NOT FOR REPLICATION Keywords used to prevent the CHECK constraint from being enforced during the distribution process used by replication. but not on the replication process. A CHECK constraint can be defined on the subscription table to prevent users from modifying it.. or list of columns. The NOT FOR REPLICATION clause means the constraint is enforced on user modifications. if they fall within the replicated range. A lower fill factor creates the index with more space available for new index entries without having to allocate new space. Unless the NOT FOR REPLICATION clause is added. FOREIGN KEY. they are rejected. with a default of 0. If you specify CLUSTERED for a UNIQUE constraint and also specify a PRIMARY KEY constraint.n]) Is a column.REFERENCES Is a constraint that provides referential integrity for the data in the column or columns.

um intervalo de valores possíveis através de Foreign Keys. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. ou seja. • Integridade referencial . valores default. 3. não é possível inserir existir uma chave estrangeira que não tenha uma valor na chave primária. indexes únicos e através da propriedade Identity. • Integridade de domínio .1 Tipos de integridade Os diferentes tipos de integridade podem ser classificados em três categorias: • Integridade da entidade . Este tipo de integridade pode ser definido através de uma chave primária. ou seja.01) Pág 43 .4.4 Integridade da BD Uma das fases mais importantes no desenho da BD é definir a integridade dos dados.A integridade relacional assegura que as relações entre duas tabelas (chave primária e chave estrangeira) sejam preservadas. Check Constraints.Bases de Dados II ISEP _________________________________________________________________________________________ 3.A integridade de um domínio permite definir validações para uma determinada coluna. o formato. Pode ser definido o tipo de dados. definição de Not Null e regras. nem é possível apagar um registo da chave primária se já existirem chaves estrangeiras para esse registo.A integridade de uma entidade permite definir que numa tabela cada registo é único. garantir o máximo possível de regras de validação para os dados que vão ser manipulados.

..4... Syntax incompleta CREATE TABLE table_name ( { <column_definition> | column_name AS computed_column_expression | <table_constraint> } [...Bases de Dados II ISEP _________________________________________________________________________________________ 3. Podem ser definidos para uma ou várias colunas da tabela.n])] REFERENCES ref_table [(ref_column[...n] ) <column_definition> ::= { column_name data_type } [ [ DEFAULT constant_expression ] [ <column_constraint>] [ .01) Pág 44 .2 Definição de Constraints Os constraints são definidos através dos comando Create Table e Alter Table..n] ) }] | FOREIGN KEY [(column[...n] <column_constraint> ::= [CONSTRAINT constraint_name] { [ NULL | NOT NULL ] | [ { PRIMARY KEY | UNIQUE }[CLUSTERED | NONCLUSTERED]]] | [ [FOREIGN KEY] REFERENCES ref_table [(ref_column) ]] | CHECK (logical_expression) } <table_constraint> ::= [CONSTRAINT constraint_name] { [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED] { ( column[.. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3...n])] | CHECK (search_conditions) } Argumentos incompletos DEFAULT Specifies the value provided for the column when a value is not explicitly supplied during an insert.

FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column(s) in the referenced table. PRIMARY KEY Is a constraint that enforces entity integrity for a given column or columns through a unique index. UNIQUE Is a constraint that provides entity integrity for a given column or columns through a unique index. or CHECK constraint definition. NULL is not strictly a constraint.. FOREIGN KEY constraints can reference only columns that are PRIMARY KEY or UNIQUE constraints in the referenced table. CHECK Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. NULL | NOT NULL Are keywords that determine whether or not null values are allowed in the column. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.REFERENCES Is a constraint that provides referential integrity for the data in the column or columns. NOT NULL.. FOREIGN KEY. UNIQUE. Only one PRIMARY KEY constraint can be created per table. but can be specified in the same manner as NOT NULL. FOREIGN KEY. A table can have multiple UNIQUE constraints. Constraints are special properties that enforce data integrity and create special types of indexes for the table and its columns.Bases de Dados II ISEP _________________________________________________________________________________________ CONSTRAINT Is an optional keyword indicating the beginning of a PRIMARY KEY.01) Pág 45 .

10) insert into linhas values(1.11) insert into linhas values(1. linha INT NOT NULL CHECK (linha < 99) CONSTRAINT c_linhas PRIMARY KEY(número.100) Erro : Porque a linha só suporta valores inferiores a 99 delete from factura Erro : Porque existem linhas delete from linhas delete from factura _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 46 .1) Erro : Porque já existe a factura 1 insert into linhas values(1.10) Erro : Porque já existe a linha 10 da factura 1 insert into linhas values(1.1) Erro : Porque não existe ainda a factura 1 insert into factura values(1. valor FLOAT) CREATE TABLE linhas (número INT NOT NULL REFERENCES Factura(número).Bases de Dados II ISEP _________________________________________________________________________________________ Ex.1) insert into factura values(1. CREATE TABLE Factura (número INT NOT NULL CONSTRAINT c_número PRIMARY KEY. linha)) Testar com: insert into linhas values(1.

Nome Varchar(40). built-in function. monetary. CREATE TABLE cliente (codigo int DEFAULT 0.4. Zona int) sp_bindefault Nome. Os defaults podem ser criados no momento da criação de uma tabela ou através do objecto Default.4. Any constant. Binary data must be preceded by 0x. CREATE DEFAULT Nome AS 'desconhecido' // DROP DEFAULT Nome CREATE TABLE Cliente(cod int. Ex.1 Definição de defaults É possível definir um default para cada coluna de uma tabela acrescentado o comando Default seguido do valor do default. DataEntrada DateTime DEFAULT getdate() ) INSERT INTO cliente (Nome) VALUES (‘teste’) 3. integer. Enclose character and date constants in single quotation marks (‘). Specifying the default owner name is optional. 'cliente. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Nome Varchar(20). or mathematical expression can be used.3. and monetary data must be preceded by a dollar sign ($).3. quando este não é especificado ao inserir um registo. 3.nome' //sp_unbindefault 'cliente. The default value must be compatible with the data type of the column. Default names must conform to the rules for identifiers.2 Objecto Default É possível definir vários objectos defaults que poderão ser usados em várias colunas de tabelas. constant_expression Is an expression that contains only constant values (it cannot include the names of any columns or other database objects).01) Pág 47 .3 Defaults Os Defaults permitem especificar que valor fica guardado numa coluna.4.Bases de Dados II ISEP _________________________________________________________________________________________ 3. Ex. and floating-point constants do not require quotation marks.nome' INSERT INTO cliente (cod) VALUES (2) Syntax CREATE DEFAULT default AS constant_expression Arguments default Is the name of the default.

'cliente. 'cliente.zona' 3. 3) sp_bindrule regraZona. EMail varchar (40) NULL.cod' INSERT INTO cliente (cod) VALUES (777) Ex. CREATE RULE RegraZona AS @Z IN (1.01) Pág 48 . Nome varchar (40) NOT NULL .5 Base de dados Mercado create Database BD2 go use BD2 CREATE TABLE Familias ( FamiliaID int NOT NULL .cod' //sp_unbindrule regra_codigo. CodPostal varchar (40) NULL . Descricao varchar (40) NOT NULL ) CREATE TABLE Clientes ( ClienteID int NOT NULL . 2.Bases de Dados II ISEP _________________________________________________________________________________________ 3. Morada2 varchar (40) NULL .4 Rules O comando Rule permite definir regras de validação para as colunas das tabelas. ZonaID int ) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. CREATE RULE regra_codigo AS @x >= 0 AND @x < 99 //DROP RULE regra_codigo sp_bindrule regra_codigo. 'cliente.4. DataNasc DateTime NULL. Ex. Morada1 varchar (40) NULL .

Descricao nvarchar (40) NOT NULL ) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. PrecoVenda money NULL . CodFilho Varchar (10) NOT NULL . LinhaID int NOT NULL. Qtd real NOT NULL ) CREATE TABLE Zona ( ZonaID int NOT NULL . Existencias smallint NULL ) CREATE TABLE Arvore ( CodPai Varchar(10) NOT NULL . Desconto real NOT NULL ) CREATE TABLE Facts ( FactID int IDENTITY (1. Data datetime NULL . Descricao nvarchar (40) NOT NULL . DataVenc datetime NULL ) CREATE TABLE Artigos ( ArtigoID varchar(10) NOT NULL .Bases de Dados II ISEP _________________________________________________________________________________________ CREATE TABLE LinhasFact ( FactID int NOT NULL . PrecoCompra money NULL . FamiliaID int NULL . ClienteID int NOT NULL . ArtigoID varchar(10) NOT NULL . Preco money NOT NULL .01) Pág 49 . Quant smallint NOT NULL . 1) NOT NULL .

01) Pág 50 .6 Integridadade da BD Mercado /* Criação de chaves primárias para todas as tabelas */ ALTER TABLE Familias ADD CONSTRAINT PK_Familias PRIMARY KEY CLUSTERED ( FamiliaID ) ALTER TABLE Clientes ADD CONSTRAINT PK_Clientes PRIMARY KEY NONCLUSTERED ( ClienteID ) ALTER TABLE LinhasFact ADD CONSTRAINT PK_LinhasFact PRIMARY KEY NONCLUSTERED ( FactID.Bases de Dados II ISEP _________________________________________________________________________________________ 3. LinhaID ) ALTER TABLE Facts ADD CONSTRAINT PK_Facts PRIMARY KEY NONCLUSTERED ( FactID ) ALTER TABLE Artigos ADD CONSTRAINT PK_Artigos PRIMARY KEY NONCLUSTERED ( ArtigoID ) ALTER TABLE Zona WITH NOCHECK ADD CONSTRAINT PK_Zona PRIMARY KEY CLUSTERED ( ZonaID ) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.

assumir por defeito 1 .Se o Preço não é introduzido.Bases de Dados II ISEP _________________________________________________________________________________________ ALTER TABLE Arvore WITH NOCHECK ADD CONSTRAINT PK_Arvore PRIMARY KEY NONCLUSTERED (CodPai.Os Preços são sempre maior ou igual a 0. assumir por defeito 0 . */ /* Criar chave estrangeira nas LinhasFact para a tabela Facts */ /* Criar chave estrangeira nas LinhasFact para a tabela Artigos */ _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. .01) Pág 51 . O Preço é sempre maior ou igual a 0. CONSTRAINT CK_Quant CHECK (Quant > 0). assumir por defeito 0 .A Existência é sempre maior ou igual 0. assumir por defeito 0 . CONSTRAINT CK_Preco CHECK (Preco >= 0) /* Na tabela Artigos : . CONSTRAINT DF_LinhasFact_Desconto DEFAULT (0) FOR Desconto.A Quantidade é sempre maior que 0. assumir por defeito 0 . CONSTRAINT CK_Desconto CHECK (Desconto >= 0 and Desconto <= 100).Se a Existência não é introduzida. . CONSTRAINT DF_LinhasFact_Quant DEFAULT (1) FOR Quant. CodFilho) /* Na tabela LinhasFact : . */ ALTER TABLE LinhasFact ADD CONSTRAINT DF_LinhasFact_Preco DEFAULT (0) FOR Preco.Se a Quantidade não é introduzida.O Desconto só pode aceitar valores entre 0 e 100.Se os Preços não forem introduzidos.Se o Desconto não é introduzido.

assumir por defeito 1 .Se a Quantidade não é introduzida.A Quantidade é sempre maior que 0. */ _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.Bases de Dados II ISEP _________________________________________________________________________________________ /* Criar chave estrangeira na tabela Fact para a tabela Cliente */ ALTER TABLE Facts ADD CONSTRAINT FK_Facts_Clientes FOREIGN KEY ( ClienteID ) REFERENCES Clientes ( ClienteID ) /* Criar chave estrangeira na tabela Artigos para a tabela Familia */ /* Criar chave estrangeira na Clientes para a tabela Zona */ /* Criar chaves estrangeiras na tabela Arvore para a tabela Artigo */ /* Na tabela Arvore : .01) Pág 52 .

''. 'Sul') insert into clientes values(1. 'ser@mail. '1960/11/01'. 'Camisolas') insert into familias values(3.01) Pág 53 . 'Alexandre'. 'Sapatos') insert into familias values(5. '1975/05/01'. 'Porto'. 'Serafim'.1) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. 'Coimbra'. 'Lisboa'.pt'. 'sus@mail. 'mar@mail. 'António'.pt'. 'Porto'. 3) insert into clientes values(3. 'Calças') insert into familias values(2. 'Afonso'. 'pau@mail. 'Porto'. ''.'4200'. '1967/05/01'. 'Susana'.Bases de Dados II ISEP _________________________________________________________________________________________ insert into familias values(1. 'Faro'. 1) insert into clientes values(2. 'camisas') insert into familias values(6. ''. ''.'4200'. 'Blusas') insert into familias values(4. ''.pt'. 1) insert into clientes values(6.pt'.pt'. 'ant@mail. '1982/01/01'. 'Porto'. 1) insert into clientes values(7. 'producao') insert into zona values(1.'4200'. 'ale@mail.'4200'.2) insert into clientes values(4.'4200'. 'Paulo'.'4200'. ''. '1980/01/11'. 'Norte') insert into zona values(2.pt'. ''. 'Mário'.'4200'. '1960/08/01'. '1976/01/01'. 'Centro') insert into zona values(3. 'afo@mail.pt'. 3) insert into clientes values(5.

12000.100) insert into artigos values(5.01) Pág 54 . 2. 0) insert into linhasFact values(3.null.6. 1. null. 13000. 13000. 7. 12000. 'Calça ganga preta'. 8. 4. 'Camisa azul'. 0) insert into linhasFact values(5. 1. Qtd) VALUES('C'. 'Blusa Vermelha'. 'Artigo C'. 1. 1. 40. 6. Qtd) VALUES('C'. 'Artigo A'. '1991/03/01') insert into facts values(1.'D') INSERT INTO Arvore(CodPai. 5000. 5. 1. 'Artigo D'. 7000. '1991/02/01'. 1. 12000. 2) INSERT INTO Arvore(CodPai. null. 'H'. 14000.null) insert into artigos values ('F'. 5. CodFilho. 11000. Qtd) VALUES('A'.100) insert into artigos values(9.'H') /* Não insere o campo IDENTITY */ insert into facts values(1. 400. '1998/01/01') insert into facts values(1. 1. 3.100) insert into artigos values(6.Bases de Dados II ISEP _________________________________________________________________________________________ insert into artigos values(1. CodFilho. null. 0) insert into linhasFact values(4. 4. 5. 0) insert into linhasFact values(6. 2. CodFilho. 2) INSERT INTO Arvore(CodPai. '1998/01/01'. 0) insert into linhasFact values(2. 6. 1. 15000. 10) insert into linhasFact values(1. 6000. 6. 9990. 1. 12000. Qtd) VALUES('A'. null.null) INSERT INTO Arvore(CodPai. 100) insert into artigos values(8. 1.'C'.100) insert into artigos values(7. 12000. 12000. 9500. 8000. 8000. '1998/02/01'. 3. '1997/02/01'. 5. 1.null) insert into artigos values ('G'. null. 1.null) insert into artigos values ('D'. 5. 11000. 1. 20. '1995/02/01'. 9. '1998/03/01') insert into facts values(2. 5. 100. 12500. 'Calça ganga azul'. 6. 2) INSERT INTO Arvore(CodPai.100) insert into artigos values(4. CodFilho) VALUES('D'. 1. 0) insert into linhasFact values(3. 5. 12000. 'Camisa ganga preta'. 1000. 2.'E'. 6000. 4) INSERT INTO Arvore(CodPai. 2. 0) insert into linhasFact values(1. null. 'Camisola azul'. 4. null. 2000. 7000. null. 5. 4. 6. 2. 'Artigo G'. '1998/03/01') insert into facts values(7. CodFilho) VALUES('A'. 'Sapatos XY'. 6. 8500. 10) insert into linhasFact values(2. 'Camisola preta'. '1995/04/01') insert into facts values(4. 5. null.null) insert into artigos values ('E'. 'Calça ganga branca'. '1998/02/01'. 13500. 0) insert into linhasFact values(6.null) insert into artigos values ('B'.100) insert into artigos values ('A'.100) insert into artigos values(2. 6000. CodFilho. 150. 2. '1997/03/01') insert into linhasFact values(1.null) insert into artigos values ('H'. 1. 1. 8000. 100) insert into artigos values(3. 1. 'Artigo F'. 1.null.'F'.null) insert into artigos values ('C'. 'Artigo E'. 6. 'Artigo B'. 0) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.'B'.

até encontrar o que quer.Bases de Dados II ISEP _________________________________________________________________________________________ 3. se não existir um index.7 Indexes O modo de funcionamento básico dos indexes na base de dados são semelhantes aos de um livro. As vantagens da utilização de indexes são : • Rapidez de acesso aos dados • Garante a integridade de dados (unique indexes) As desvantagens são : • Gastam espaço em disco • Gasto de tempo em manutenção Ex. CREATE UNIQUE INDEX C1 ON Cliente(Nome) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. pois o índice tem a informação organizada. Nas bases de dados é igual. um índice permite encontrar rapidamente informação sem haver a necessidade de ler todo o livro. quando há necessidade de encontrar informação. Num livro.01) Pág 55 . de uma forma sequencial. a base de dados terá que percorrer todos os registos da tabela.

If CLUSTERED is not specified. and the bottom (leaf) level of the clustered index contains the actual data rows. or explicitly with CREATE INDEX).. index_name Is the name of the index. Microsoft® SQL Server™ checks for duplicate values when the index is created (if data already exists) and checks each time data is added with an INSERT or UPDATE statement. table Is the table that contains the column or columns to be indexed. Index names must be unique within a table but need not be unique within a database. UPDATE or INSERT statements that would generate duplicate key values are rolled back. create the clustered index before creating any nonclustered indexes. A unique index cannot be created on a single column or multiple columns (composite index) in which the complete key (all columns of that key) is NULL in more than one row. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. the physical order of the rows is not the same as their indexed order.. Specifying the database and table owner names is optional. a nonclustered index is created. With a nonclustered index. these are treated as duplicate values for indexing purposes. the CREATE INDEX statement is canceled and an error message giving the first duplicate is returned. Index names must follow the rules of identifiers. the row locator is the clustered index key for the row. List the columns to be included in the composite index (in sort-priority order) inside the parentheses after table. If the table does not have a clustered index. Each table can have as many as 249 nonclustered indexes (regardless of how they are created: implicitly with PRIMARY KEY and UNIQUE constraints.01) Pág 56 . column Is the column or columns to which the index applies. the row locator is the row’s disk address. Specify two or more column names to create a composite index on the combined values in the specified columns.n]) Arguments UNIQUE Creates a unique index (one in which no two rows are permitted to have the same index value). Each index can provide access to the data in a different sort order. Because nonclustered indexes are rebuilt when a clustered index is created. NONCLUSTERED Creates an object that specifies the logical ordering of a table. If the table does have a clustered index. If duplicate key values exist. and SQL Server displays an error message. When a unique index exists. CLUSTERED Creates an object where the physical order of rows is the same as the indexed order of the rows.. Each index row contains the nonclustered key value and one or more row locators that point to the row that contains the value.Bases de Dados II ISEP _________________________________________________________________________________________ Syntax incompleta CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX index_name ON table (column [. The leaf level of a nonclustered index contains index rows.

7. Por isso. Os clustered indexes devem ser usados quando : • Colunas que tenham um número limitado de valores distintos. 3. se existirem poucos valores (ex. • Estejam frequentemente em operações de pesquisa. pois maior será a possibilidade de alterar a sua posição física. > e <. pois como os registos já estão ordenados.2 Nonclustered Indexes Os nonclustered indexes são semelhantes aos clustered indexes apenas com as seguintes diferenças : • Não implicam que os registos da tabela fiquem ordenados físicamente • Podem existir até 249 por tabela Devem ser utilizados em colunas que : • Contenham um grande número de valores distintos. • Colunas que são acedidas sequencialmente. mas este index pode ter mais que uma coluna.7. • Têm muitas colunas. • Tabelas que trabalhem muito com operações de lock. normalmente o Primary Key. como os estados dos EUA (50). Mas.01) Pág 57 .Bases de Dados II ISEP _________________________________________________________________________________________ 3. só é possível ter um clustered index por tabela. • Queries que retornam um intervalo de valores aquando da utilização dos operadores. • Colunas que são frequentemente acedidas envolvendo condições de Join ou de Group By. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.1 Clustered Indexes Um clustered index determina a ordem física dos registo numa tabela. pois implica mover fisicamente os registos na BD. implica um aumento de performance. ficam mais rápidas quando utilizam um index clustered. Os clustered indexes não devem ser usados quando : • Contenham colunas que tenham alterações frequentes. 0 e 1) não deverá ser criado um index.

3 Criação de indexes na BD Mercado /* Criar indexes para o campo Nome na tabela Clientes */ /* Criar indexes para o campo ZonaID na tabela Clientes */ /* Criar indexes para o campo ArtigoID na tabela LinhasFact */ /* Criar indexes para o campo ClienteID na tabela Facts */ CREATE CREATE CREATE CREATE INDEX ClienteNome ON Clientes(Nome) INDEX ClienteZonaID ON Clientes(ZonaID) INDEX LinhasFactArtigoID ON LinhasFact(ArtigoID) INDEX FactClienteID ON Facts(ClienteID) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.7.Bases de Dados II ISEP _________________________________________________________________________________________ 3.01) Pág 58 .

which define the specific path SQL Server is to use in navigating from one table to another. INTO new_table_name Specifies that the result set is used to create a new table. which are tables in OLE DB data sources made accessible to SQL Server. new_table_name specifies the name of the new table. SQL Server internally resolves a view reference to references against the base tables that make up the view. WHERE search_conditions The WHERE clause is a filter that defines the conditions each row in the source tables must meet to qualify for the SELECT. It is a comma-separated list of expressions.Bases de Dados II ISEP _________________________________________________________________________________________ 4. The WHERE clause is also used on the DELETE and UPDATE statements to define the rows in the target tables that are modified. Each select list expression is usually a reference to a column in the source table or view the data is coming from. Only rows that meet the conditions contribute data to the result set. Data from rows that do not meet the conditions are not used. This is called a distributed query. • Views in the local SQL Server. The FROM clause can also contain join specifications. GROUP BY group_by_list _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Each expression defines both the format (data type and size) and the source of the data for the result set column. The FROM clause is also used on the DELETE and UPDATE statements to define the tables that are modified. These sources can be: • Base tables in the local server running Microsoft® SQL Server™. but can be any other expression. Acesso a dados O acesso aos dados armazenados nas BD é feito através do comando Select. A syntax completa deste comando é um pouco complexa.01) Pág 59 . or referencing the data source in an OPENROWSET or OPENQUERY function. mas poderá ser resumida as seguintes opções : SELECT select_list [INTO new_table_name] FROM table_list [WHERE search_conditions] [GROUP BY group_by_list] [HAVING search_conditions] [ORDER BY order_list [ASC | DESC] ] select_list Describes the columns of the result set. • Linked tables. such as a constant or a Transact-SQL function. FROM table_list Contains a list of the tables from which the result set data is retrieved. Using the * expression in a select list specifies that all columns in the source table are returned. OLE DB data sources can be accessed from SQL Server by linking them as a linked server.

HAVING search_conditions The HAVING clause is an additional filter that is applied to the result set.1 Joins Com o comando Join é possível extrair informação de duas ou mais tabelas num único Select. Nome FROM Facts JOIN Clientes ON (Clientes. join_condition defines the predicate to be evaluated for each pair of joined rows Ex. Syntax : FROM first_table join_type second_table [ON (join_condition)] join_type specifies what kind of join is performed: an inner. one for each value of ShipVia. the Northwind Orders table has three values in ShipVia. Ex. or GROUP BY clauses in the SELECT statement. the HAVING clause filters rows from the intermediate result set built from the application of any FROM. outer. Logically. order_list specifies the result set columns that make up the sort list.Bases de Dados II ISEP _________________________________________________________________________________________ The GROUP BY clause partitions the result set into groups based on the values in the columns of the group_by_list. SELECT FactID. ORDER BY order_list [ ASC | DESC ] The ORDER BY clause defines the order in which the rows in the result set are sorted.01) Pág 60 . SELECT * FROM Clientes WHERE ClienteId < 10 ORDER BY Nome 4.ClienteID = Facts. although a GROUP BY clause is not required before a HAVING clause. HAVING clauses are most commonly used with a GROUP BY clause.ClienteID) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. WHERE.ClienteID. For example. ORDER BY must be used in any SELECT statement for which the order of the result set rows is important. or cross join. ORDER BY is important because relational theory specifies that the rows in a result set cannot be assumed to have any sequence unless ORDER BY is specified. Facts. A GROUP BY ShipVia clause partitions the result set into three groups. The ASC and DESC keywords are used to specify if the rows are sorted in ascending or descending sequence. para isso é necessário definir a relação entre elas.

Customers. When there is a match between the tables.ClienteID = Facts.ClienteID) OU SELECT FactID. SELECT OrderID. All rows from the right table are returned. SELECT Facts.ClienteID) JOIN LinhasFact ON (Facts. artigoID FROM Facts JOIN Clientes ON (Facts.FactID =LinhasFact. que permitem especificar os registos a extrair para um determinada relação : LEFT JOIN or LEFT OUTER JOIN The result set of a left outer join includes all the rows from the left table specified in the LEFT OUTER clause.CustomerID = Customers. Clientes WHERE Clientes. the select list columns from the other table contain null values. Clientes. Nome FROM Facts. F. Any time a row has no match in the other table.ClienteID Ex. • RIGHT JOIN or RIGHT OUTER JOIN A right outer join is the reverse of a left outer join. CompanyName FROM Orders LEFT JOIN Customers ON (Orders.01) Pág 61 .ClienteID = F.FactID) Existem vários tipos de Join. Nome. the entire result set row contains data values from the base tables. Nome FROM Facts As F JOIN Clientes As C ON (C.CustomerID) WHERE orderID < 10260 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.Bases de Dados II ISEP _________________________________________________________________________________________ OU SELECT FactID.ClienteID. When a row in the left table has no matching rows in the right table. the associated result set row contains null values for all select list columns coming from the right table.FactID. • FULL JOIN or FULL OUTER JOIN A full outer join returns all rows in both the left and right tables.ClienteID = Clientes. • Ex.CustomerID. Facts.ClienteID. Null values are returned for the left table any time a right table row has no matching row in the left table. not just the ones in which the joined columns match.ClienteID.

Seleccionar todas as facturas do cliente 1 e respectiva quantidade de factura.Bases de Dados II ISEP _________________________________________________________________________________________ 4.----------1 5 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Seleccionar o volume total de facturas TotFact ----------33 SELECT SUM(quant) As TotFact FROM linhasfact Ex.01) Pág 62 . Seleccionar todas as facturas do cliente 1 com quantidade facturada superior a 3 FactID TotQt ----------.----------1 5 5 1 Ex. AVG.2 Funções de agregação As funções de agregação (ex. COUNT. FactID TotQt ---------. MAX E MIN) agrupam um conjunto de valores. Ex. SUM.

Seleccionar todos os artigos.3333 7 7000. Ex. ArtigoID PrecoVenda PrecoMedio ---------.01) Pág 63 .0000 9333.--------------------1 12000.0000 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.0000 9333.0000 9333.0000 9333. ArtigoID PrecoVenda ----------.0000 9333.0000 9333.0000 9333.3333 3 12500.0000 9 8500. de um Insert ou de um Update. PrecoVenda.--------------------4 6000.3333 9 8500.0000 9333. de um Delete.0000 9333.0000 7 7000.3333 6 12000.3333 8 8000. juntamente com o preço médio de todos os artigos.0000 8 8000.Bases de Dados II ISEP _________________________________________________________________________________________ 4.3 SubQueries Uma subquerie é uma instrução de select embutida no meio de uma querie (Select).3333 5 5000.3333 SELECT ArtigoID.3333 2 13000.0000 5 5000.3333 4 6000. Seleccionar todos os artigos cujo preço seja inferior a média de preços dos artigos.--------------------. (SELECT AVG(PrecoVenda) FROM Artigos) As PrecoMedio FROM Artigos Ex.

--------------------1 5 23 21.7300 4 1 23 4.3400 5 5 23 21.-------. o total da quantidade facturada. ArtigoID TotQt TotQtFact Percentagem ----------. Seleccionar todas as facturas cuja data seja igual a factura com a data mais recente.01) Pág 64 .7300 7 1 23 4.Bases de Dados II ISEP _________________________________________________________________________________________ Ex.3400 8 5 23 21. FactId Data ----------. e a percentagem que essa quantidade representa em relação ao total da facturação. Efectuar uma selecção em que conste o produto.7300 2 5 23 21.000 5 1998-02-01 00:00:00. a sua quantidade facturada.------------.000 Ex.--------------------------2 1998-02-01 00:00:00.7300 9 1 23 4.3400 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.

Descricao FROM artigos where descricao like "Calça%" _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Seleccionar todos os produtos cuja descrição comece por Calça ArtigoID Descricao ----------. ClienteID Nome ----------. Seleccionar o nome de todos os clientes a quem não sejam feitas vendas desde 01/01/1996.Bases de Dados II ISEP _________________________________________________________________________________________ Ex.Significa qualquer string com zero ou mais caracteres _ (underscore) – Significa um único caracter Ex.4 Metacarcteres Os metacaracteres são utilizados em pesquisas para procurar informação semelhante ao pretendido juntamente com a instrução LIKE.---------------------------------------2 Afonso 3 Susana 4 Mário 5 Paulo 6 Serafim 4.---------------------------------------1 Calça ganga preta 2 Calça ganga azul 3 Calça ganga branca SELECT ArtigoID.01) Pág 65 . % (percentagem) .

pt 6 ser@mail. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.---------------------------------------3 sus@mail.01) Pág 66 .pt Se for necessário procurar numa string o caracter % é preciso colocar um caracter de escape.---------------------------------------1 Calça ganga preta 2 Calça ganga azul 3 Calça ganga branca 4 Camisa ganga preta Ex. seria: coluna LIKE ‘%£%%’ escape ‘£’ Significa que o caracter a seguir ao escape ‘£’ será interpretado como um caracter normal. Selecionar todos os produtos que tenha na sua designação a palavra ganga ArtigoID Descricao ----------.pt e cujo o nome do mail comece em S e tenha só 3 caracteres. Selecionar todos clientes cujo email termine em @mail. clienteID email ----------.Bases de Dados II ISEP _________________________________________________________________________________________ Ex. A instrução para procurar uma coluna a procura de %.

5 Unions Uma union serve para juntar os dados de duas ou mais pesquisas.Bases de Dados II ISEP _________________________________________________________________________________________ 4. nessa união se aparecerem dados repetidos só um deles é visualizado. Ex. Mostrar todas as descrições de artigos e de familias ordenadas descricao ---------------------------------------Blusa Vermelha Blusas Calça ganga azul Calça ganga branca Calça ganga preta Calças Camisa azul Camisa ganga preta camisas Camisola azul Camisola preta Camisolas Sapatos Sapatos XY SELECT descricao FROM Artigos UNION SELECT descricao FROM familias ORDER BY Descricao _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 67 .

As transações são fundamentais para garantir a consistência dos dados na BD. • Durabilidade Após uma transação estar completa. uma transação garante que múltiplas alterações feitas a bases de dados são efectuadas como um só bloco.C. não existe a possibilidade de algumas operações serem executadas e outras não. ou seja. Numa transação é possível utilizar todas as instruções T-SQL à excepção de : • ALTER DATABASE • DROP DATABASE • RECONFIGURE • BACKUP LOG • DUMP TRANSACTION • RESTORE DATABASE • CREATE DATABASE • LOAD DATABASE • RESTORE LOG • DISK INIT • LOAD TRANSACTION _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. em nenhuma circunstancia vê os dados da outra transação no seu estado intermédio. Transações e bloqueamentos Uma transação é uma sequência de operações que são executadas como uma só. As aplicações controlam as transações definindo quando elas iniciam e quando acabam. mesmo que exista falhas no sistema. • Isolamento Se existirem transações concorrentes. elas ficarão isoladas. todos os dados têm que ficar consistentes com as regras definidas na base de dados. cada transação vê os dados na forma original.01) Pág 68 . fazem parte dessa transação até a transação terminar.D. Uma transação tem que garantir as propriedades A. em que todas as operações são executadas ou nenhuma é. • Consistência Quando uma transação está completa. ou seja. os seus efeitos serão permanentes (persistentes) no sistema. • Atomicidade Uma transação é considerada como um bloco único para processamento. todas as instruções SQL que são executadas.Bases de Dados II ISEP _________________________________________________________________________________________ 5.I. Quando uma transação é iniciada.

'valor 1') INSERT INTO teste VALUES (2. • Rollback Transaction É o comando usado para terminar uma transação quando foram encontrados erros. 'valor 2') COMMIT TRANSACTION Ex. Ex. Todas as modificações feitas durante a transação são desfeitas.1 Explicit Transactions Numa transação explicit é definido o inicio e o fim da transação. qualquer instrução é efectuada (commit) ou abortada (rollback) quando estiver concluída. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 69 . • Begin Transaction É o comando que permite definir o início da transação • Commit Transaction É o comando utilizado para terminar uma transação quando não foram encontrados erros. Nome Varchar(30)) BEGIN TRANSACTION INSERT INTO teste VALUES (1. ou seja. BEGIN TRANSACTION DELETE FROM teste ROLLBACK TRANSACTION 5. CREATE TABLE Teste (Cod INT PRIMARY KEY.Bases de Dados II ISEP _________________________________________________________________________________________ • UPDATE STATISTICS Existem 3 modos distintos para lidar com transações : • Explicit • Autocommit • Implicit 5.2 Autocommit Transactions O SQL Server executa por defeito o modo de transação autocommit.

'Valor 1 Novamente') Apesar de dar erro na última linha. 'bbb') GO /* Commit da primeira transação */ COMMIT TRANSACTION GO /* Segunda transação iniciada pela instrução SELECT */ SELECT COUNT(*) FROM ImplicitTran GO INSERT INTO teste2 VALUES (3. ou seja. 'ccc') GO SELECT * FROM teste2 GO /* Commit da segunda transação */ COMMIT TRANSACTION GO SET IMPLICIT_TRANSACTIONS OFF GO _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Para iniciar este modo utiliza-se a instrução SET IMPLICIT_TRANSACTIONS ON.3 Implicit Transactions No modo de transação implicit. 'Valor 2') INSERT INTO Teste VALUES (1. 'aaa') GO INSERT INTO teste2 VALUES (2. todas as outras ficaram reflectidas na BD. Ex. não é necessário colocar a instrução Begin Transaction. para terminar SET IMPLICIT_TRANSACTIONS OFF.Bases de Dados II ISEP _________________________________________________________________________________________ Ex. CREATE TABLE teste2 (Cod int PRIMARY KEY. INSERT INTO Teste VALUES (1.01) Pág 70 . 'valor 1') INSERT INTO Teste VALUES (2. 5. o SQL Server automaticamente inicia uma nova transação após a última ter sido terminada (commit ou rollback). Nome Varchar(30) NOT NULL) GO SET IMPLICIT_TRANSACTIONS ON GO /* Primeira transação iniciada pela instrução INSERT */ INSERT INTO teste2 VALUES (1.

DELETE FROM TESTE BEGIN TRANSACTION XX Insert into teste values (1. pois a penúltima instrução fez Rollback de todas as instruções anteriores. 'xxxx') BEGIN TRANSACTION YY Insert into teste values (2. Ex. Ao utilizar o comando Rollback serão desfeitas todas as operações efectuadas (não apenas a última) a não ser que seja especificado um SavePoint com o comando Save Transaction. DELETE FROM TESTE BEGIN TRANSACTION XX Insert into teste values (1. Ex. para isso utiliza-se o mesmo comando de inicio. 'xxxx') COMMIT TRANSACTION YY COMMIT TRANSACTION Ex. 'xxxx') BEGIN TRANSACTION YY Insert into teste values (2. será referente ao último Begin. 'xxxx') COMMIT TRANSACTION YY ROLLBACK TRANSACTION _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. nesse caso é possível efectuar um Rollback até esse ponto.01) Pág 71 .4 Nested Transactions É possível existirem transações embutidas dentro de outras transações. o Begin Transaction. 'xxxx') BEGIN TRANSACTION YY Insert into teste values (2.Bases de Dados II ISEP _________________________________________________________________________________________ 5. Sempre que for encontrado o comando Commit Transaction. 'xxxx') ROLLBACK TRANSACTION COMMIT TRANSACTION XX Dá um erro na última instrução. DELETE FROM TESTE BEGIN TRANSACTION XX Insert into teste values (1.

5 Bloqueamentos O SQL Server utiliza o processo de bloqueamento (locks) para garantir a integridade e consistência da BD. 'xxxx') ROLLBACK TRANSACTION ponto1 COMMIT TRANSACTION 5.01) Pág 72 . se não altera ou se altera parcialmente. O SQL Server utiliza dois processos para controlar o acesso múltiplo a um registo : • Pessimistic É o default do SQL Server. • Optimistic Pode ser utilizada com os cursores. este processo de bloqueamento é baseado no princípio de que é anormal (mas não impossível) que determinados dados sejam acedidos ao mesmo tempo por vários utilizadores. se altera por cima. BEGIN TRANSACTION XX Insert into teste values (1. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. se assim aconteceu o programador/utilizador é que decide o que fazer aos dados. Apenas no momento da actualização é que é determinado se os dados foram alterados entretanto.Bases de Dados II ISEP _________________________________________________________________________________________ Ex. O lock evita que os utilizadores acedam a dados que estão a ser alterados por outros. os dados são bloqueados durante toda a transação. 'xxxx') SAVE TRANSACTION ponto1 Insert into teste values (2. e que alterem os mesmos dados ao mesmo tempo.

PRIOR. ABSOLUTE) are available. INSENSITIVE Defines a cursor that makes a temporary copy of the data to be used by the cursor. LAST.. therefore. NEXT is the only fetch option supported.. NEXT. Ex. SCROLL cannot be specified if FAST_FORWARD is also specified.n]]] SQL-92 Arguments cursor_name Is the name of the Transact-SQL server cursor being defined...01) Pág 73 . modifications made to base tables are not reflected in the data returned by fetches made to this cursor.n]]}] Transact-SQL Extended Syntax DECLARE cursor_name CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL] [STATIC | KEYSET | DYNAMIC | FAST_FORWARD] [READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] [TYPE_WARNING] FOR select_statement [FOR UPDATE [OF column_name [. All requests to the cursor are answered from this temporary table in tempdb. SCROLL Specifies that all fetch options (FIRST. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.. and this cursor does not allow modifications. if INSENSITIVE is omitted.Bases de Dados II ISEP _________________________________________________________________________________________ 6.. Um cursor é semelhante a uma lista de valores. If SCROLL is not specified in an SQL-92 DECLARE CURSOR. Cursors Os registos retornados por uma instrução SQL podem ser manipulados através de um cursor. cursor_name must conform to the rules for identifiers. sendo possível percorrer e posicionar em qualquer um dos registos. committed deletes and updates made to the underlying tables (by any user) are reflected in subsequent fetches. RELATIVE. DECLARE Clientes CURSOR FOR SELECT * FROM Clientes SQL-92 Syntax DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR FOR select_statement [FOR {READ ONLY | UPDATE [OF column_name [. When SQL-92 syntax is used.

or DYNAMIC keywords. FORWARD_ONLY is the default. unless the keywords STATIC. The cursor is only implicitly deallocated at disconnect. or trigger in which the cursor was created. and DYNAMIC Transact-SQL cursors. The cursor name can be referenced in any stored procedure or batch executed by the connection. or a stored procedure OUTPUT parameter. the cursor operates as a DYNAMIC cursor. or DYNAMIC are specified. stored procedure. all columns can be updated. READ ONLY Prevents updates from being made through this cursor.. KEYSET. Transact-SQL Extended Arguments cursor_name Is the name of the Transact-SQL server cursor being defined. UPDATE [OF column_name [. The cursor is implicitly deallocated when the batch. if one is specified the other cannot be specified. cursor_name must conform to the rules for identifiers. If it is passed back in an OUTPUT parameter. stored procedure.. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. If OF column_name [. FOR BROWSE. stored procedure. only the columns listed allow modifications.n]] Defines updatable columns within the cursor... the cursor is deallocated when the last variable referencing it is deallocated or goes out of scope.n] is specified. and DYNAMIC cursors default to SCROLL. FAST_FORWARD and FORWARD_ONLY are mutually exclusive. stored procedure. If UPDATE is specified without a column list. The cursor name is only valid within this scope. LOCAL Specifies that the scope of the cursor is local to the batch. STATIC. FETCH NEXT is the only supported fetch option.. unless the cursor was passed back in an OUTPUT parameter. FORWARD_ONLY is supported with STATIC. which can assign the parameter to a cursor variable to reference the cursor after the stored procedure terminates. and INTO are not allowed within select_statement of a cursor declaration. The cursor can be referenced by local cursor variables in the batch. Unlike database APIs such as ODBC and ADO. KEYSET. COMPUTE BY. GLOBAL Specifies that the scope of the cursor is global to the connection.Bases de Dados II ISEP _________________________________________________________________________________________ select_statement Is a standard SELECT statement that defines the result set of the cursor. The keywords COMPUTE. When neither FORWARD_ONLY nor SCROLL is specified. KEYSET.01) Pág 74 . or trigger terminates. If FORWARD_ONLY is specified without the STATIC. Microsoft® SQL Server™ implicitly converts the cursor to another type if clauses in select_statement conflict with the functionality of the requested cursor type. or trigger. An OUTPUT parameter is used to pass the local cursor back to the calling batch. KEYSET.. The cursor cannot be referenced in a WHERE CURRENT OF clause in an UPDATE or DELETE statement. FORWARD_ONLY Specifies that the cursor can only be scrolled from the first to the last row. This option overrides the default capability of a cursor to be updated. or trigger.

READ_ONLY Prevents updates from being made through this cursor. This option overrides the default capability of a cursor to be updated. Changes to nonkey values in the base tables. an attempt to fetch the row returns an @@FETCH_STATUS of -2. modifications made to base tables are not reflected in the data returned by fetches made to this cursor. either made by the cursor owner or committed by other users. TYPE_WARNING Specifies that a warning message is sent to the client if the cursor is implicitly converted from the requested type to another. OPTIMISTIC cannot be specified if FAST_FORWARD is also specified. OPTIMISTIC Specifies that positioned updates or deletes made through the cursor do not succeed if the row has been updated since it was read into the cursor. the attempted positioned update or delete fails. The new values are visible if the update is done through the cursor by specifying the WHERE CURRENT OF clause. FAST_FORWARD and FORWARD_ONLY are mutually exclusive. The cursor cannot be referenced in a WHERE CURRENT OF clause in an UPDATE or DELETE statement. FAST_FORWARD cannot be specified if SCROLL or FOR_UPDATE is also specified. SCROLL_LOCKS Specifies that positioned updates or deletes made through the cursor are guaranteed to succeed. or a checksum value if the table has no timestamp column. and membership of the rows can change on each fetch. Microsoft® SQL Server™ locks the rows as they are read into the cursor to ensure their availability for later modifications. therefore. It instead uses comparisons of timestamp column values. FAST_FORWARD Specifies a FORWARD_ONLY. SCROLL_LOCKS cannot be specified if FAST_FORWARD is also specified. to determine whether the row was modified after it was read into the cursor. are visible as the owner scrolls around the cursor. order. Updates of key values from outside the cursor resemble a delete of the old row followed by an insert of the new row. READ_ONLY cursor with performance optimizations enabled. The ABSOLUTE fetch option is not supported with dynamic cursors. KEYSET Specifies that the membership and order of rows in the cursor are fixed when the cursor is opened. The set of keys that uniquely identify the rows is built into a table in tempdb known as the keyset. If a row is deleted. if one is specified the other cannot be specified. All requests to the cursor are answered from this temporary table in tempdb. If the row was modified. and this cursor does not allow modifications. The data values. DYNAMIC Defines a cursor that reflects all data changes made to the rows in its result set as you scroll around the cursor. Inserts made by other users are not visible (inserts cannot be made through a Transact-SQL server cursor). _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.Bases de Dados II ISEP _________________________________________________________________________________________ STATIC Defines a cursor that makes a temporary copy of the data to be used by the cursor. SQL Server does not lock rows as they are read into the cursor. and attempts to fetch the row with the old values return an @@FETCH_STATUS of -2. The row with the new values is not visible.01) Pág 75 .

FOR BROWSE. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.n]] Defines updatable columns within the cursor.. SQL Server implicitly converts the cursor to another type if clauses in select_statement conflict with the functionality of the requested cursor type..01) Pág 76 ... The keywords COMPUTE. If OF column_name [. and INTO are not allowed within select_statement of a cursor declaration.Bases de Dados II ISEP _________________________________________________________________________________________ select_statement Is a standard SELECT statement that defines the result set of the cursor. UPDATE [OF column_name [.. unless the READ_ONLY concurrency option was specified. COMPUTE BY. only the columns listed allow modifications.. If UPDATE is specified without a column list.n] is supplied. all columns can be updated.

• Fetch Last Avança para o último registo do cursor. Usar o comando Open para executar o Select e abrir o cursor 4. Declarar um cursor com o comando Declare e associar-lhe um Select 3. • @@Fetch_Status Permite testar o status do fetch. Fechar o cursor com a instrução Close.01) Pág 77 . para libertar a memória dos resultados do cursor. ocorreu um erro. • Fetch Absolute n Avança para posição n do cursor.Bases de Dados II ISEP _________________________________________________________________________________________ 6. Declarar variáveis para guardar os valores retornados pelo cursor 2. NOTA : Para utilizar os comandos de fetch (á excepção do Next) é necessário declarar um cursor do tipo SCROLL.1 Manipulação O processo típico da utilização de um cursor é : 1. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. 5. • Fetch Prior Avança para o registo anterior. Utilizar instruções de posicionamento do cursor • Fetch First Avança para o primeiro registo do cursor. • Fetch Next Avança para o registo seguinte. se diferente de zero. e possivelmente utilizar a instrução Deallocate se não for necessário usar novamente o cursor. • Fetch Relative n Avança n registos a partir do registo actual do cursor.

01) Pág 78 . Nome FROM Clientes OPEN Cursor_Cli FETCH NEXT FROM Cursor_Cli WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM Cursor_Cli END CLOSE Cursor_Cli DEALLOCATE Cursor_Cli Ex. seguido da descrição da sua posição de ordem (par ou ímpar) no cursor _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Seleccionar todos os clientes.Bases de Dados II ISEP _________________________________________________________________________________________ Ex. Seleccionar todos os clientes através de um cursor DECLARE Cursor_Cli CURSOR FOR SELECT ClienteID.

Bases de Dados II ISEP _________________________________________________________________________________________ Ex. imprima o primeiro. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 79 . o terceiro e o último. Estando os clientes todos ordenados alfabeticamente.

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Podem também ser utilizadas como mecanismos de segurança de dados..Bases de Dados II ISEP _________________________________________________________________________________________ 7.01) Pág 80 . As views são normalmente utilizadas para simplificar a manipulação dos dados.. pois é possível definir seguranças ao nível de uma view. e definir os dados na perspectiva do utilizador. Specifying the view owner name is optional. e podem ser resultados de uma ou mais tabelas. A view é criada dinamicamente a partir do momento que é invocada. View names must follow the rules for identifiers. Uma view actua como um filtro sobre os dados da BD. Views Uma view (vista) é uma tabela virtual cuja estrutura e conteúdo é definido através de uma query. Syntax CREATE VIEW view_name [(column [.n])] [WITH ENCRYPTION] AS select_statement [WITH CHECK OPTION] Arguments view_name Is the name of the view..

it is valid to use <join_hint> and <table_hint> hints as specified in the FROM clause. When a row is modified through a view. a function. Functions can be used in the select_statement. There are. select_statement Is the SELECT statement that defines the view. reenable constraint checking with either the WITH CHECK option or the CHECK constraint_name options of ALTER TABLE. WITH ENCRYPTION Encrypts the syscomments entries that contain the text of the CREATE VIEW statement. constraint values must be able to be verified. or when a column in a view is given a name different from that of the column from which it is derived. COMPUTE. however. when two or more columns may otherwise have the same name (usually because of a join). It can use more than one table and other views. To select from the objects referenced in the SELECT clause of a view being created. If column is not specified.01) Pág 81 . however. • Include the INTO keyword. or a constant. WITH CHECK OPTION Forces all data modification statements executed against the view to adhere to the criteria set within select_statement. query optimization generates less optimal plans without constraints. A view does not have to be a simple subset of the rows and columns of one particular table. AS Are the actions the view is to take. a few restrictions on the SELECT clauses in a view definition. Column names can also be assigned in the SELECT statement. A CREATE VIEW statement cannot: • Include ORDER BY. Naming a column in CREATE VIEW is necessary only when a column is derived from an arithmetic expression. select_statement can use multiple SELECT statements separated by UNION to create a query using partitioned data. It is not necessary to have constraints to use partitioned data. the WITH CHECK OPTION guarantees that the data remains visible through the view after the modification has been committed. • Reference a temporary table. or COMPUTE BY clauses. n Is a placeholder indicating that multiple columns can be specified. the view columns acquire the same names as the columns in the SELECT statement. For partitioned data to be used in ALTER VIEW or CREATE VIEW. If constraint checking has been disabled. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. A view can be created using more than one table or other views with a SELECT clause of any complexity. Because select_statement uses the SELECT statement. it is necessary to have the appropriate permissions.Bases de Dados II ISEP _________________________________________________________________________________________ column Is the name to be used for a column in a view.

familias WHERE artigos.familiaID Ex.0000 António 67000. Nome Volume -----------------------------------. desde que superior a 60000.familiaID GO SELECT * FROM vista_artigos Ex. CREATE VIEW vista_artigos AS SELECT ArtigoID. familias. DROP VIEW vista_artigos Ex. familias.--------------------Alexandre 71000.01) Pág 82 .familiaID = familias.familiaID = familias. familias WHERE artigos.Descricao.descricao AS DescFamilia FROM artigos. Criar uma view que contenha o nome do cliente e o volume bruto da sua facturação. artigos.0000 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. ALTER VIEW vista_artigos AS SELECT ArtigoID.Bases de Dados II ISEP _________________________________________________________________________________________ Ex.descricao AS DescFamilia FROM artigos.

Bases de Dados II ISEP _________________________________________________________________________________________

8. Stored Procedures
Stored Procedures são procedimentos semelhantes aos de outras linguagens, mas que podem ser guardados no servidor. • Aceitam parâmetros de entrada e retornam resultados • Contêm instruções que executam operações na BD, incluindo chamadas a outras stored procedures • Retornam um valor de status indicando se aconteceu um erro, e qual foi.

8.1 Vantagens
A utilização de stored procedures trazem grandes vantagens, nomeadamente : • Programação por módulos Uma stored procedure após ser guardada na BD, pode ser invocada várias vezes no programa. Pode também ser alterada sem que haja necessidade de alterar em todos os lados. • Execução mais rápida Se uma operação tem muitas instruções T-SQL e/ou é executada muitas vezes, as stored procedures conseguem ser mais rápidas, pois são compiladas e optimizadas no momento da sua criação. • Diminuição do tráfego na rede Uma operação T-SQL que contenha muitas linhas de código pode ser executada através de uma única linha de código que é enviado através da rede. • Segurança Pode ser dada permissão aos utilizadores para executar uma stored procedure, mesmo que não tenham permissão para utilizar o mesmo código directamente através de um editor.

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 83

Bases de Dados II ISEP _________________________________________________________________________________________

8.2 Syntax
Ex. CREATE PROC Cli AS SELECT * FROM CLIENTE EXEC cli

Ex. ALTER PROC Cli @CodCli int AS SELECT * FROM CLIENTES WHERE ClienteID = @CodCli EXEC Cli 1

Syntax CREATE PROC[EDURE] procedure_name [;number] [ {@parameter data_type} [VARYING] [= default] [OUTPUT] ] [,...n] [WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ] [FOR REPLICATION] AS sql_statement [...n]

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 84

Bases de Dados II ISEP _________________________________________________________________________________________

Arguments
procedure_name Is the name of the new stored procedure. Procedure names must conform to the rules for identifiers and must be unique within the database and its owner. Local or global temporary procedures can be created by preceding the procedure_name with a single number sign (#procedure_name) for local temporary procedures and a double number sign (##procedure_name) for global temporary procedures. The complete name, including # or ##, cannot exceed 128 characters. Specifying the procedure owner name is optional. ;number Is an optional integer used to group procedures of the same name so they can be dropped together with a single DROP PROCEDURE statement. For example, the procedures used with an application called orders may be named orderproc;1, orderproc;2, and so on. The statement DROP PROCEDURE orderproc drops the entire group. If the name contains delimited identifiers, the number should not be included as part of the identifier; use the appropriate delimiter around procedure_name only. @parameter Is a parameter in the procedure. One or more parameters can be declared in a CREATE PROCEDURE statement. The value of each declared parameter must be supplied by the user when the procedure is executed (unless a default for the parameter has been defined). A stored procedure can have a maximum of 1,024 parameters. Specify a parameter name using an at sign (@) as the first character. The parameter name must conform to the rules for identifiers. Parameters are local to the procedure; the same parameter names can be used in other procedures. By default, parameters can take the place only of constants; they cannot be used in place of table names, column names, or the names of other database objects. data_type Is the data type of the parameter. All data types, including text and image, can be used as a parameter for a stored procedure. However, the cursor data type can be used only on OUTPUT parameters. When you specify a data type of cursor, the VARYING and OUTPUT keywords must also be specified VARYING Specifies the result set supported as an output parameter (constructed dynamically by the stored procedure and whose contents can vary). Applies only to cursor parameters. default Is a default value for the parameter. If a default is defined, the procedure can be executed without specifying a value for that parameter. The default must be a constant or it can be NULL. It can include wildcard characters (%, _, [], and [^]) if the procedure uses the parameter with the LIKE keyword.

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 85

'A' OU EXEC Cli @InicioNome = 'A'. @TotalReg int OUTPUT AS SELECT @TotalReg = COUNT(*) FROM CLIENTES WHERE ClienteID > @CodCli AND Nome LIKE (@InicioNome+'%') DECLARE @Tot int EXEC Cli 1.Bases de Dados II ISEP _________________________________________________________________________________________ 8. @TotalReg = @Tot OUTPUT PRINT 'Numero de registos = ' + cast(@Tot AS Varchar(10)) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. @CodCli=2 Exemplo de parâmetros de saída ALTER PROC Cli @CodCli int. Exemplo de parâmetros de entrada ALTER PROC Cli @CodCli int=NULL.3 Parâmetros É possível passar parâmetros para a uma stored procedure. Para cada parâmetro é necessário definir o nome. a direcção (entrada ou saída) e o valor defeito (opcional).01) Pág 86 . que podem ser utilizados como variáveis dentro da stored procedure. @InicioNome Varchar(40). As stored procedures também podem retornar valores. o tipo de dados. @InicioNome Varchar(40) AS SELECT * FROM CLIENTES WHERE ClienteID > @CodCli AND Nome LIKE (@InicioNome+'%') EXEC Cli 2. 'A'.

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 87 . 'A'.Bases de Dados II ISEP _________________________________________________________________________________________ Exemplo de parâmetro de resultado ALTER PROC Cli @CodCli int. @InicioNome Varchar(40). Criar uma stored procedure que mediante a entrada de 2 variáveis (Cod e Nome) insira um registo no ficheiro de clientes e devolva um erro se acontecer algum problema. @TotalReg = @Tot OUTPUT IF @Erro <> 0 Print 'Ocorreu um erro !' ELSE PRINT 'Numero de registos = ' + cast(@Tot AS Varchar(10)) 8. @TotalReg int OUTPUT AS BEGIN SELECT @TotalReg = COUNT(*) FROM CLIENTES WHERE ClienteID > @CodCli AND Nome LIKE (@InicioNome+'%') RETURN @@ERROR END DECLARE @Tot int. @Erro int EXEC @Erro = Cli 1.4 Exercícios Ex.

Criar uma stored procedure que mediante a passagem dos parâmetros descrição da família. Criar uma stored procedure que determine qual os dois códigos de família de artigos com mais vendas.----------1 17 5 6 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. devolva a quantidade vendida dessa família nesse período. data inicio e data fim.Bases de Dados II ISEP _________________________________________________________________________________________ Ex.01) Pág 88 . Ex. '1999/01/01' FamiliaID Quantidade -------------. num determinado período. EXEC FamiliasMaisVendida '1991/01/01'.

01) Pág 89 . Criar uma stored procedure que devolva a média de descontos por factura. Criar uma stored procedure que mediante a passagem de uma string. Média 1133.33 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.Bases de Dados II ISEP _________________________________________________________________________________________ Ex. mostre todas as descrições de artigos e todas as descrições de famílias que tenham essa string. EXEC DescFamArt 'ça' Descricao ---------------------------------------Calça ganga azul Calça ganga branca Calça ganga preta Calças Ex. ordenadas.

Bases de Dados II ISEP _________________________________________________________________________________________ Ex. Primeiro 6000 Terceiro 5500 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. desde que acima da média de descontos das factura. Criar uma stored procedure que devolva o primeiro e o terceiro desconto de factura.01) Pág 90 .

as funcões podem ser usadas na cláusula SELECT como uma função normal do SQL. 9. User Functions Apesar das funções já existentes.01) Pág 91 . é possível serem criadas outras que podem ser invocadas embutidas num query. contrariamente as Stored procedures e podem ser passados parametros. por exemplo. esta pode ser usado na cláusula FROM como uma tabela normal. • Nos casos em que o resultado é uma tabela. Pode ser usada. • Podem ser utilizadas numa query. 9.1 Utilização A utilização de funções é vantajosa em determinadas circunstancias : • Podem ser utilizados para encapsular e centralizar a lógica das regras de negócio. para cálculos de valores ou formatação. • Nsa situações em que o resultado é um único valor. Ex. contrariamente as Views. ou através do comando EXECUTE (semelhante as Stored Procedures).QtStock(-3) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. CREATE FUNCTION QtStock (@Qt Smallint) RETURNS Smallint AS BEGIN IF @QT<0 SET @Qt = 0 RETURN @Qt END Testar : SELECT dbo.Bases de Dados II ISEP _________________________________________________________________________________________ 9.2 Scalar Functions São funções que retornam unicamente um valor.

Retornar todos os clientes que fazem anos num determinado mês.FactID AND @Ano = YEAR(Data)) FROM Artigos RETURN END _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Vendas Int) AS BEGIN INSERT @VAno SELECT ArtigoID. Ex. CREATE FUNCTION AnivMes (@Mes Tinyint) RETURNS TABLE AS RETURN (SELECT ClienteID. Ex. Retornar as vendas de artigos num determinado ano CREATE FUNCTION ArtVendasAno (@Ano Int) RETURNS @VAno TABLE (ArtigoID int.3 Inline Table-valued Functions São funções que têm como resultado uma tabela de valores que é resultado de uma única instrução de select.ArtigoID AND LinhasFact.FactID = Facts. Descricao Nvarchar(40).01) Pág 92 . (Select SUM(Quant) FROM Facts. Descricao. Nome FROM Clientes WHERE Month(DataNasc) = @Mes) Testar: SELECT Nome from AnivMes(1) 9. linhasFact WHERE LinhasFact.4 Multi-statement Table-valued Functions São funções que retornam tabelas definidas e trabalhadas pelo utilizador.Bases de Dados II ISEP _________________________________________________________________________________________ 9.ArtigoID = Artigos.

.. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ .. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ...n ] ] ) RETURNS scalar_return_data_type [ WITH < function_option> [ [....n ] ] ) RETURNS @return_variable TABLE < table_type_definition > [ WITH < function_option > [ [.] .5 Syntax Scalar Functions CREATE FUNCTION [ owner_name...n ] ] [ AS ] RETURN [ ( ] select-stmt [ ) ] Multi-statement Table-valued Functions CREATE FUNCTION [ owner_name.] .] ..n ] ] [ AS ] BEGIN function_body RETURN END _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ .Bases de Dados II ISEP _________________________________________________________________________________________ Testar com : SELECT * FROM ArtVendasAno(1998) WHERE Vendas > 1 9...n] ] [ AS ] BEGIN function_body RETURN scalar_expression END Inline Table-valued Functions CREATE FUNCTION [ owner_name..n ] ] ) RETURNS TABLE [ WITH < function_option > [ [.01) Pág 93 ..

TABLE Specifies that the return value of the table-valued function is a table. the keyword "default" must be specified when calling the function in order to get the default value. A function can have a maximum of 1. or the names of other database objects. except text. owner_name must be an existing user ID. When a parameter of the function has a default value. In inline table-valued functions. including bigint and sql_variant. and timestamp. image. This behavior is different from parameters with default values in stored procedures in which omitting the parameter also implies the default value.n ] ) Arguments owner_name Is the name of the user ID that owns the user-defined function. @parameter_name Is a parameter in the user-defined function. scalar_parameter_data_type Is the parameter data type. scalar_return_data_type Is the return value of a scalar user-defined function. The parameter name must conform to the rules for identifiers. Specify a parameter name using an at sign (@) as the first character. Function names must conform to the rules for identifiers and must be unique within the database and to its owner.01) Pág 94 . unless a default for the parameter is defined. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Nonscalar types such as cursor and table cannot be specified. the TABLE return value is defined through a single SELECT statement. column names.. Parameters are local to the function. The value of each declared parameter must be supplied by the user when the function is executed. All scalar data types. they cannot be used in place of table names. ntext. the same parameter names can be used in other functions. Inline functions do not have associated return variables.. Parameters can take the place only of constants. One or more parameters can be declared in a CREATE FUNCTION statement. function_name Is the name of the user-defined function. can be used as a parameter for user-defined functions. The timestamp data type and user-defined data types not supported. scalar_return_data_type can be any of the scalar data types supported by SQL Server.. scalar_expression Specifies the scalar value that the scalar function returns.024 parameters.Bases de Dados II ISEP _________________________________________________________________________________________ < function_option > ::= { ENCRYPTION | SCHEMABINDING } < table_type_definition > :: = ( { column_definition | table_constraint } [ .

SCHEMABINDING Specifies that the function is bound to the database objects that it references. ENCRYPTION Indicates that SQL Server encrypts the system table columns containing the text of the CREATE FUNCTION statement. used to store and accumulate the rows that should be returned as the value of the function. function_body is used only in scalar functions and multi-statement table-valued functions. then the database objects that the function references cannot be altered (using the ALTER statement) or dropped (using a DROP statement). select-stmt Is the single SELECT statement that defines the return value of an inline table-valued function. function_body Specifies that a series of Transact-SQL statements. which together do not produce a side effect. If a function is created with the SCHEMABINDING option. In multi-statement table-valued functions. In scalar functions. @return_variable is a TABLE variable. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Using ENCRYPTION prevents the function from being published as part of SQL Server replication. define the value of the function.01) Pág 95 .Bases de Dados II ISEP _________________________________________________________________________________________ In multi-statement table-valued functions. function_body is a series of Transact-SQL statements that together evaluate to a scalar value. function_body is a series of Transact-SQL statements that populate a table return variable.

seguido da sua idade relativamente ao ano passado como parâmetro.Bases de Dados II ISEP _________________________________________________________________________________________ 9. devolva todos os clientes que fazem anos nesse mês. Solução: _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.6 Exercícios Exercício : Crie uma função que devolva os dados do tipo DateTime no seguinte formato : Ano-Mês-Dia Solução: Exercício : Crie uma função que mediante a passagem de um determinado ano / mês.01) Pág 96 .

Se o produto não existe deverá retornar: 'Produto inexistente' Solução: _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. retorne num parâmetro a descrição do mesmo.Bases de Dados II ISEP _________________________________________________________________________________________ 10. Solução: 10.1 Crie um Stored Procedure que liste as descrições de todos os produtos que têm filhos.Exercícios 10.2 Criar um Stored Procedure que receba como parâmetro o código do produto e caso ele exista.01) Pág 97 .

3 Criar um Stored Procedure que liste as descrições de todos os produtos que têm filhos solução: 10.01) Pág 98 .Bases de Dados II ISEP _________________________________________________________________________________________ 10.4 Criar um Stored Procedure que receba como parâmetro o código de um produto e retorne a estrutura da árvore correspondente _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.

Criar um Stored Procedure que calcule os preços de compra de todos os produtos que têm filhos.Bases de Dados II ISEP _________________________________________________________________________________________ 10.5. sabendo que esse preço de compra‚ é o somatório do preço de compra vezes a quantidade para cada um dos seus filhos.01) Pág 99 . Solução: _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.

preço de compra total e preço de venda. respectivas quantidades. Criar um stored procedure que receba como parâmetro um código de produto e crie as ordens de fabrico necessárias para o produzir.Bases de Dados II ISEP _________________________________________________________________________________________ 10. Exemplo: up_ordemfabrico A. Cada ordem de fabrico deverá ter um nº único. O preço de venda é calculado como sendo o preço de compra + 10% + 1% por cada filho que o produto tiver.01) Pág 100 . quais os produtos necessários para a produzir. 1 Resultado: Conteúdo da tabela OrdemFab: NumOrdem 1 2 3 Produto A C D Qtd 1 4 1 PrecoCompra 1740 380 20 PrecoVenda 1740 + 10%(1740) + 3%(1740) 380 + 10%(380) + 2%(380) 20 + 10%(20) + 1%(20) _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. Deverão ser criadas ordens de fabrico para o produto e para cada um dos seus descendentes que têm filhos.6. preço de compra de cada produto.

CONSTRAINT FK_OrdemFabDetalhe1 FOREIGN KEY (Filho) REFERENCES artigos (artigoID). ArtigoID varchar (10) NOT NULL. 1). CONSTRAINT PK_OrdemFab PRIMARY KEY NONCLUSTERED (NumOrdem). Qtd int NOT NULL DEFAULT 1 CHECK (Qtd > 0). Qtd real NOT NULL DEFAULT 1 CHECK (Qtd > 0). CONSTRAINT PK_OrdemFabDetalhe PRIMARY KEY NONCLUSTERED (NumOrdem.Bases de Dados II ISEP _________________________________________________________________________________________ Conteúdo da tabela OrdemFabDetalhe: NumOrdem 1 1 1 2 2 3 Filho B C D E F H Qtd 2 4 1 2 2 1 Preco 100 380 20 40 150 20 CREATE TABLE OrdemFab ( NumOrdem int NOT NULL identity(1. Filho). Filho varchar (10) NOT NULL . PrecoCompra real NULL. Preco real NULL. PrecoVenda real NULL.01) Pág 101 . CONSTRAINT FK_OrdemFabDetalhe2 FOREIGN KEY (NumOrdem) REFERENCES OrdemFab (NumOrdem)) Solução: _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. CONSTRAINT FK_OrdemFab1 FOREIGN KEY (ArtigoID) REFERENCES Artigos (ArtigoID)) CREATE TABLE OrdemFabDetalhe ( NumOrdem int NOT NULL.

Bases de Dados II ISEP _________________________________________________________________________________________ _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 102 .

Criar um stored procedure que permita verificar se a estrutura da árvore é válida. Solução: _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.7.01) Pág 103 .Bases de Dados II ISEP _________________________________________________________________________________________ 10. A estrutura é inválida se um produto tiver um ou mais filhos (em qualquer nível da árvore) com o seu código.

se apagar a factura eliminar automaticamente todas as linhas. Os triggers são tratados como transações. por exemplo. • Podem ser utilizados para colocar restrições mais complexas que as definidas numa instrução de Check. DROP TRIGGER InsertClientes _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. pois podem utilizar validações de colunas que tenham ligação com outras tabelas (ao contrário do Check). Update ou Delete. e efectuar acções de acordo com esse estado. 'Cliente 99') Ex.01) Pág 104 . Nome) Values (99.1 Utilização A utilização de triggers é vantajosa em determinadas circunstancias : • Podem ser utilizados para efectuar alterações em cascade. Ex. é desfeito tudo que esse trigger tivesse feito. 11. • O trigger tem a possibilidade de saber o estado do registo antes e depois de uma determinada alteração. • É possível executar um trigger diferente por cada evento de Insert. Update ou Delete. ALTER TRIGGER InsertClientes ON Clientes FOR INSERT AS PRINT 'Foi inserido um registo em clientes' Ex. ou seja. se acontecer um problema. Esses eventos poder ser de Insert. Triggers Um trigger é uma stored procedure que é automaticamente executada em resposta a um determinado evento. CREATE TRIGGER InsertClientes ON Clientes FOR INSERT AS PRINT 'Foi inserido um registo em clientes' Testar : INSERT INTO clientes (ClienteID.Bases de Dados II ISEP _________________________________________________________________________________________ 11.

.] [UPDATE]} Are keywords that specify which data modification statements. separate the options with commas.. Specifying the trigger owner name is optional.Bases de Dados II ISEP _________________________________________________________________________________________ 11... Specifying the owner name of the table is optional.1 Syntax Syntax CREATE TRIGGER trigger_name ON table [WITH ENCRYPTION] { {FOR { [DELETE] [.] [INSERT] [.01) Pág 105 . A trigger name must conform to the rules for identifiers and must be unique within the database.] [UPDATE] } [WITH APPEND] [NOT FOR REPLICATION] AS { IF UPDATE (column) [{AND | OR} UPDATE (column)] [.] [UPDATE] } [WITH APPEND] [NOT FOR REPLICATION] AS sql_statement [.. WITH ENCRYPTION Encrypts the syscomments entries that contain the text of CREATE TRIGGER..] [UPDATE] } | { [INSERT] [. { [DELETE] [. Any combination of these in any order is allowed in the trigger definition. when attempted against this table. Views cannot be specified..n] } } Arguments trigger_name Is the name of the trigger. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.. If more than one option is specified. activate the trigger.n] | IF (COLUMNS_UPDATED() {bitwise_operator} updated_bitmask) { comparison_operator} column_bitmask [. table Is the table on which the trigger is executed.n] } | {FOR { [INSERT] [.n] } sql_statement [ . sometimes called the trigger table.] [INSERT] [. At least one option must be specified.

the table on which the user action is attempted) and hold the old values or new values of the rows that may be changed by the user action. UPDATE(column) can be used anywhere inside the body of the trigger. INSERT. it should not return data to the user. For the IF UPDATE (column) statement. Trigger conditions specify additional criteria that determine whether the attempted DELETE. or UPDATE statements cause the trigger action(s) to be carried out. The Transact-SQL statements in a trigger often include control-of-flow language.Bases de Dados II ISEP _________________________________________________________________________________________ WITH APPEND Specifies that an additional trigger of an existing type should be added. This column can be of any data type supported by SQL Server. Use of this optional clause is needed only when the compatibility level is less than or equal to 65. Triggers can include any number and kind of Transact-SQL statements except SELECT. To test for an INSERT or UPDATE action for more than one column. AS Are the actions the trigger is to take. sql_statement Is the trigger condition(s) and action(s). to retrieve all values in the deleted table. specify a separate UPDATE(column) clause following the first one. do not include the table name before the column name in an IF UPDATE clause. If the compatibility level is greater than or equal to 70. IF UPDATE (column) Tests for an INSERT or UPDATE action to a specified column and is not used with DELETE operations. NOT FOR REPLICATION Indicates that the trigger should not be executed when a replication process modifies the table involved in the trigger.) . They are structurally similar to the table on which the trigger is defined (that is. The trigger actions specified in the Transact-SQL statements go into effect when the user action (DELETE. column Is the name of the column to test for either an INSERT or UPDATE action. INSERT. the WITH APPEND optional clause is not needed to add an additional trigger of an existing type (this is the default behavior of CREATE TRIGGER with the compatibility level setting greater than or equal to 70. Because the table name is specified in the ON clause. A trigger is designed to check or change data based on a data modification statement. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. use: SELECT * FROM deleted n Is a placeholder indicating that multiple Transact-SQL statements can be included in the trigger.01) Pág 106 . More than one column can be specified. multiple columns can be included by repeating the UPDATE (column) clause. A few special tables are used in CREATE TRIGGER statements: • deleted and inserted are logical (conceptual) tables. or UPDATE) is attempted. For example.

C4. column_bitmask Is the integer bitmask of those columns to check whether they are updated or inserted. Ex. and C5. ALTER TRIGGER UpdateClientes ON Clientes FOR UPDATE AS BEGIN DECLARE @OldNome Varchar(40). bitwise_operator Is the bitwise operator to use in the comparison. table t1 contains columns C1. Use the equals sign (=) to check whether all columns specified in updated_bitmask are actually updated. and C4 are all updated (with table t1 having an UPDATE trigger). C3. whether the mentioned column or columns were inserted or updated. in an INSERT or UPDATE trigger only. comparison_operator Is the comparison operator. Use the greater than symbol (>) to check whether any or some of the columns specified in updated_bitmask are updated.01) Pág 107 . COLUMNS_UPDATED returns a varbinary bit pattern that indicates which columns in the table were inserted or updated. @NewNome Varchar(40) SELECT @OldNome=Nome FROM deleted SELECT @NewNome=Nome FROM inserted PRINT 'O nome do cliente foi alterado de ' + @OldNome + ' para ' + @NewNome END UPDATE Clientes SET Nome = 'Osório' WHERE ClienteID = 99 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3. specify a value of 2. For example. C2. C3. To check whether only column C2 is updated. COLUMNS_UPDATED can be used anywhere inside the body of the trigger. To check whether columns C2.Bases de Dados II ISEP _________________________________________________________________________________________ IF (COLUMNS_UPDATED()) Tests. specify a value of 14. updated_bitmask Is the integer bitmask of those columns actually updated or inserted.

Ex. Criar um trigger que actualize automaticamente a existência do artigo sempre que seja inserida uma linha de factura. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 108 . Criar um trigger que actualize automaticamente a existência do artigo sempre que seja apagada uma linha de factura.Bases de Dados II ISEP _________________________________________________________________________________________ 11.2 Exercícios Ex.

Bases de Dados II ISEP _________________________________________________________________________________________ Ex. Criar um trigger que actualize automaticamente a existência do artigo sempre que seja alterada uma linha de factura. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 109 .

Criar um trigger que não deixe criar clientes da zona ‘Norte’. _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 110 .Bases de Dados II ISEP _________________________________________________________________________________________ Ex.

Exercícios Gerais 12.Linha em branco na quebra 5 1 _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.Linha em branco na quebra 2 3 5 2 4 5 <.1 Escreva um script que imprima os dois artigos mais vendidos por zona.01) Pág 111 .---------.-------------1 4 10 1 5 <. no seguinte formato : Zona Artigo Quantidade --------.Bases de Dados II ISEP _________________________________________________________________________________________ 12.

Bases de Dados II ISEP _________________________________________________________________________________________ _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 112 .

Bases de Dados II ISEP _________________________________________________________________________________________

12.2 Escreva uma stored procedure que mediante a passagem de uma família, diga em que zona(s) é que aquela família não tem vendas. A família 3 tem vendas em todas as zonas OU A família 3 não tem vendas nas seguintes zonas : Norte Centro Sul

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 113

Bases de Dados II ISEP _________________________________________________________________________________________

12.3 Criar uma view com as facturas já vencidas e com o nome do respectivo cliente. Nome FactID ClienteID Data DataVenc -------------------- ----------- --------------- ----------------- ----------------António 1 1 1998-01-01 1998-01-01 António 2 1 1998-02-01 1998-03-01 Afonso 3 2 1995-02-01 1995-04-01

12.4 Criar um trigger que avise quando um determinado artigo atinja a existência inferior a 10.

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 114

Bases de Dados II ISEP _________________________________________________________________________________________

12.5 Criar uma stored procedure que mediante a passagem de um mês, imprima etiquetas para envelopes, para todos os clientes que fazem anos nesse mês, desde que tenham alguma factura. António Rua Afonso 437 Amial 4200 Porto

_________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.01) Pág 115

Bases de Dados II ISEP _________________________________________________________________________________________ Bibliografia SQL Server Books Online www.01) Pág 116 .com/sql Seminários Microsoft _________________________________________________________________________________________ António Rocha / Nuno Castro / Nuno Ferreira SQL Server (versão 3.microsoft.