Você está na página 1de 41

AULA PRATICA

Desenhar o DEA

Criar um banco de dados simples e banco de dados com vários ficheiros e filegroups.

Criar/alterar/remover banco de dados

Criar/alterar/remover tabelas

Inserir dados

Aplicar restrições

Criar files e filegroups

PARTE I – BANCO DE DADOS E TABELAS

Nota: tentem resolver os exercícios sem olhar para solução

1. Aplique as etapas de modelação de uma base de dados de uma clinica para o curso de
SGBD. Use o sql server 2016 para o efeito.
a) Identifique as entidades:

Entidades identificadas (paciente, consulta, receita, medico, medicamento, atendimento)

a) Apresente o modelo relacional (forma textual)

Modelo relacional (forma textual)


 MEDICO (Cod_Medico, nome, especialidade)
 PACIENTE(Cod_Paciente, nome)
 RECEITA((Cod_Receita, nome_medicamento, assinatura)
 MEDICAMENTO(Cod_Medicamento, nome, Cod_receita, Cod_Medico)
 CONSULTA((Cod_Consulta, data, Cod_paciente)
 ATENDIMENTO (Cod_Paciente, Cod_Medico)
b) Elabore o DEA
b) Crie a base de dados simples, suas tabelas. Inclua as chaves primárias, estrangeiras e
por fim aplique as restrições. Popule as tabelas com dados.

Primeiro conecte-se ao Sql SERVER

Abra o SQL Server Management Studio e conecte-se à instância desejada, como mostra a
Figura 1.

Figura 1. Conectando-se ao SQL Server no Management Studio


Existem duas formas de se conectar ao sql server database engine (Windows autenticatios e sql
server autentication.

A Windows autentication conecta-se directamente sem colocar a senha e com o sql server
autentications precisa de um login e senha. Por Padrão o sql server tem um utilizador administrador
sa e a senha a colocar é a mesma que colocou durante a instalação do sql serever.

Caso já tenha criado um usuário, pode se conectar com esse usuário.

Apos se conectar, crie uma base de dados e as tabelas no sql server.

Para criar a base de dados no sql server, existem duas formas:

utilizando

 Instruções T-SQL
 Editor gráfico

I - Criando o banco de dados e as tabelas via instruções T-SQL

Com o Management Studio aberto, clique no botão New Query, como mostra a Figura 2.

Figura 2. Criando nova Query no Management Studio

Em seguida, na parte central da interface aparecerá uma tela em branco, na qual poderá
digitar os códigos para criar o banco de dados, tabelas, efectuar consultas, etc. após executar
o código a seguir pressionar F5 ou clicar em Execute, como mostra a Figura 3:

INSIRA O CODIGO A SEGUIR

CREATE DATABASE CLINICA


GO

Com o banco criado, precisamos entrar no seu contexto para poder executar novos scripts
dentro dele. No caso, precisamos aceder para criar nossa tabela. Para isso, devemos executar
o seguinte comando:

USE CLINICA_sgbd_2023;
GO

Para confirmar que a operação foi executada como esperado, veja na parte superior esquerda
do Management Studio se o banco criado está em uso, como mostra a Figura 4.
FIGURA 4 – VERIFICANDO O BANCO DE DDADOS NO SSMS

Criação das tabelas executando o script da Listagem 1.

Listagem 1. Script para criar a base de dados e as respectivas tabelas

--Base de dados clinica


CREATE DATABASE CLINICA_SGBD_2023;
GO

USE CLINICA_SGBD_2023;
GO

--Criar tabelas

--[1] TABELA ESPECIALIDADE


CREATE TABLE TBL_ESPECIALIDADE (COD_ESPECIALIDADE INT PRIMARY
KEY NOT NULL, DESCRICAO VARCHAR(40)); GO

-- inserir dados
insert into TBL_ESPECIALIDADE (COD_ESPECIALIDADE, DESCRICAO)
values('10', 'CRIMINALISTICA'), ('20', 'PEDIATRA'), ('30', 'DENTISTA'), ('40',
'OBSTETRA'), ('50', 'CARDIOLOGISTA'), ('60', 'CIRURGIAO'), ('70', 'OTORRINO'), ('80',
'ONCOLOGISTA'), ('90', 'GENERALISTA'), ('100', 'LEGISTA');

--listagem de dados da tabela especialidade


--[2]TABELA MEDICO
CREATE TABLE TBL_MEDICO
(COD_MEDICO INT PRIMARY KEY NOT NULL, NOME_MEDICO VARCHAR(40)
NOT NULL, MORADA VARCHAR(40), COD_ESPECIALIDADE INT, CONSTRAINT
FK_ESPEC_MEDICO FOREIGN KEY (COD_ESPECIALIDADE) REFERENCES
TBL_ESPECIALIDADE (COD_ESPECIALIDADE));GO

-- inserir dados
insert into TBL_MEDICO (COD_MEDICO, NOME_MEDICO, MORADA,
COD_ESPECIALIDADE) VALUES ('01', 'JOANA PADRAO','ALTO MAE B', '100'),('09',
'ALFACE JOAQUIM','XIPAMANINE', '10'), ('02', 'JOAO DE DEUS','ALTO MAE A', '40'),
('05', 'FELIZ ANDRADE','MALHANGALENE', '20'), ('03', 'LARA SITOE','BAIRRO
ALTO', '50'), ('06', 'PEQUENO CONFIANTE','ALTO MAE B', '30'), ('04', 'MESA DA
SILVA PEDRO','MALANGA', '60')

Listagem da tabela medico

--[3] TABELA PACIENTE


CREATE TABLE TBL_PACIENTE (COD_PACIENTE INT PRIMARY KEY NOT NULL,
NOME_PACIENTE VARCHAR(40) NOT NULL, MORADA VARCHAR(40), IDADE
TINYINT); GO
-- inserir dados
insert into TBL_PACIENTE (COD_PACIENTE, NOME_PACIENTE, MORADA, IDADE)
VALUES ('01', 'ANA PADRA','ALTO MAE B', '12'),('09', 'ALFACE JOAQUIM' ,
'XIPAMANINE', '40'), ('02', 'JOAO DE DEUS','ALTO MAE A', '40'), ('05', 'FELIZ
ANDRADE','MALHANGALENE', '0'), ('03', 'LARA SITOE','BAIRRO ALTO', '50'), ('06',
'PEQUENO CONFIANTE','ALTO MAE B', '30'), ('04', 'MESA DA SILVA PEDRO ' ,
'MALANGA', '60')
Listagem da tabela paciente

--[4] TABELA RECEITA


CREATE TABLE TBL_RECEITA
(COD_RECEITA INT PRIMARY KEY NOT NULL, NOME_MEDICAMENTO
VARCHAR(40) NOT NULL, QUANT_ADMINISTRADA INT,
FORMA_ADMINISTRACAO VARCHAR(40)); GO

-- inserir dados
insert into TBL_RECEITA (COD_RECEITA, NOME_MEDICAMENTO,
QUANT_ADMINISTRADA, FORMA_ADMINISTRACAO) VALUES
('01', 'PARACETAMOL','60', 'INJECTAVEL'), ('09','DICLOFENAC','90','APLICACAO'),
('02', 'TETRACICLINA','30', 'INJECTAVEL'), ('05', 'MEBENDAZOL','90', 'ORAL'), ('03',
'MENTOCAINA','20', 'ORAL'), ('06', 'ANABOLIZANTE','10', 'INJECTAVEL'),
('04', 'PARADOX','80', 'ORAL')

Listagem de dados da tabela receita


--[5]TABELA MEDICAMENTO
CREATE TABLE TBL_MEDICAMENTO
(COD_MEDICAMENTO INT PRIMARY KEY NOT NULL, NOME_MEDICAMENTO
VARCHAR(40) NOT NULL, COD_RECEITA INT, COD_MEDICO INT, CONSTRAINT
FK_COD_RECEITA FOREIGN KEY (COD_RECEITA) REFERENCES
TBL_RECEITA(COD_RECEITA), CONSTRAINT FK_COD_MEDICO FOREIGN KEY
(COD_MEDICO) REFERENCES TBL_MEDICO (COD_MEDICO)); GO

-- inserir dados
insert into TBL_MEDICAMENTO (COD_MEDICAMENTO, NOME_MEDICAMENTO,
COD_RECEITA, COD_MEDICO) VALUES ('01', 'PARACETAMOL','6', '4'),
('09','DICLOFENAC','5','1'), ('02', 'TETRACICLINA','3', '4'), ('05', 'MEBENDAZOL','4', '4'),
('03', 'MENTOCAINA','2', '6'), ('06', 'ANABOLIZANTE','1', '5'), ('04', 'PARADOX','4', '2')

Listagem da tabela medicamento


--[6]TABELA CONSULTA
CREATE TABLE TBL_CONSULTA
(COD_CONSULTA INT PRIMARY KEY NOT NULL, DATA DATE, COD_PACIENTE
INT, CONSTRAINT FK_COD_PACIENTE FOREIGN KEY (COD_PACIENTE)
REFERENCES TBL_PACIENTE (COD_PACIENTE)); GO

-- inserir dados
insert into TBL_CONSULTA (COD_CONSULTA, DATA, COD_PACIENTE)
VALUES ('09','03/02/2022','6'),('10','03/12/2022','5'), ('04','03/02/2022','4')

Listagem
SELECT * FROM TBL_CONSULTA

--[7] TABELA ATENDIMENTO


CREATE TABLE TBL_ATENDIMENTO
(--COD_ATENDIMENTO INT PRIMARY KEY NOT NULL,
COD_PACIENTE INT,
COD_MEDICO INT, CONSTRAINT FK_COD_ATEND_PACIENTE FOREIGN KEY
(COD_PACIENTE) REFERENCES TBL_PACIENTE (COD_PACIENTE), CONSTRAINT
FK_COD_ATEND_MEDICO FOREIGN KEY (COD_MEDICO) REFERENCES
TBL_MEDICO (COD_MEDICO)); GO

-- inserir dados
insert into TBL_ATENDIMENTO (COD_PACIENTE, COD_MEDICO)
values('1','1'), ('2', '4'), ('3', '3'), ('1','1'), ('1','5'), ('6','1'), ('1','6')
2. Pode também efectuar algumas operações sobre essas tabelas criadas
a) Excluir coluna de uma tabela

ALTER TABLE TBL_MEDICO


DROP COLUMN COD_MEDICO

b) Excluir uma constraint

ALTER TABLE TBL_MEDICO


DROP constraint FK_ESPEC_MEDICO

c) Adicionar coluna a tabela

ALTER TABLE TBL_MEDICO


ADD COD_ORDEM_MEDICO SMALLINT NOT NULL

d) Adicionar coluna a tabela INCLUINDO A CONSTRAINT


ALTER TABLE TBL_MEDICO
ADD COD_ORDEM_MEDICO SMALLINT NOT NULL
constraint FK_ESPEC_MEDICO FOREIGN KEY (COD_ORDEM_MEDICO)
REFERENCES TBL_MEDICO
e) Alterar uma coluna
Alterar de small int para int

ALTER TABLE TBL_MEDICO


De ALTER COLUMN COD_ORDEM_MEDICO SMALLINT NOT NULL
Para ALTER COLUMN COD_ORDEM_MEDICO INT NOT NULL
Conseguirá alterar os dados desde que não tenha informação inserida na tabela.

f) Alterar a chave primária

Alter table add pk (Adicione chave primaria a uma tabela sem chave)

Alter table tbl_cliente


Add primary key (id_cliente)

g) Excluir tabela
Drop table tbl_cliente

Se tiver dados irá perder tudo que inseriu. Se tiver relacionamentos em outras tabelas,
primeiro apague os relacionamentos.

I.1 -- Usando auto-incremento

--Criação das tabelas com auto-incremento

Coluna INT IDENTITY (1,1) PRIMARY KEY NOT NULL


 (1,1) significa (VALOR INICIAL, INCREMENTO)

CREATE DATABASE CLINICA_SGBD_2023;


GO

USE CLINICA_SGBD_2023;
GO

--TABELA ESPECIALIDADE
CREATE TABLE TBL_ESPECIALIDADE
(COD_ESPECIALIDADE INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
DESCRICAO VARCHAR(40));
GO

--[2]TABELA MEDICO
CREATE TABLE TBL_MEDICO
(COD_MEDICO INT IDENTITY (1,1) PRIMARY KEY NOT NULL, NOME_MEDICO
VARCHAR(40) NOT NULL, MORADA VARCHAR(40), COD_ESPECIALIDADE INT,
CONSTRAINT FK_ESPEC_MEDICO FOREIGN KEY (COD_ESPECIALIDADE)
REFERENCES TBL_ESPECIALIDADE (COD_ESPECIALIDADE));
GO

--[3] TABELA PACIENTE


CREATE TABLE TBL_PACIENTE
(COD_PACIENTE INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
NOME_PACIENTE VARCHAR(40) NOT NULL, MORADA VARCHAR(40), IDADE
TINYINT);
GO

--[4] TABELA RECEITA


CREATE TABLE TBL_RECEITA
(COD_RECEITA INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
NOME_MEDICAMENTO VARCHAR(40) NOT NULL, QUANT_ADMINISTRADA INT,
FORMA_ADMINISTRACAO VARCHAR(40));
GO
--[5]TABELA MEDICAMENTO
CREATE TABLE TBL_MEDICAMENTO
(COD_MEDICAMENTO INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
NOME_MEDICAMENTO VARCHAR(40) NOT NULL, COD_RECEITA INT,
COD_MEDICO INT, CONSTRAINT FK_COD_RECEITA FOREIGN KEY
(COD_RECEITA) REFERENCES TBL_RECEITA(COD_RECEITA),CONSTRAINT
FK_COD_MEDICO FOREIGN KEY (COD_MEDICO) REFERENCES TBL_MEDICO
(COD_MEDICO));
GO

--[6]TABELA CONSULTA
CREATE TABLE TBL_CONSULTA
(COD_CONSULTA INT IDENTITY (1,1) PRIMARY KEY NOT NULL, DATA DATE,
COD_PACIENTE INT, CONSTRAINT FK_COD_PACIENTE FOREIGN KEY
(COD_PACIENTE) REFERENCES TBL_PACIENTE (COD_PACIENTE));
GO

--[7] TABELA ATENDIMENTO


CREATE TABLE TBL_ATENDIMENTO
(--COD_ATENDIMENTO INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
COD_PACIENTE INT, COD_MEDICO INT, CONSTRAINT
FK_COD_ATEND_PACIENTE FOREIGN KEY (COD_PACIENTE) REFERENCES
TBL_PACIENTE (COD_PACIENTE),CONSTRAINT FK_COD_ATEND_MEDICO
FOREIGN KEY (COD_MEDICO) REFERENCES TBL_MEDICO (COD_MEDICO)
); GO

T.2 inserção em tabelas com auto-incremento

--TABELA ESPECIALIDADE
CREATE TABLE TBL_ESPECIALIDADE
(COD_ESPECIALIDADE INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
DESCRICAO VARCHAR(40));
GO

insert into [TBL_ESPECIALIDADE] (DESCRICAO) values('PEDIATRA')

3. Criação de relationship

database diagram
Resultado final

II - Criando o banco e as tabelas via editor gráfico


Agora refaça os procedimentos anteriores, ou seja, criar o banco de dados e as tabelas, mas
sem utilizar scripts. Ao invés disso, utilize o editor gráfico do Management Studio, que nos
permite efectuar as mesmas tarefas por meio de telas auxiliares.

Então, no Management Studio, localize o Object Explorer, clique com o botão direito sobre
a pasta Databases e em seguida em New Database, como mostra a Figura 6.

Figura 6. Criando a base de dados

Feito isso, aparecerá uma janela para criar um banco de dados, como mostra a Figura 7.
Nela, basta preencher o nome do database e clicar em OK.

Figura 7. Criando novo database

Com o banco criado, agora adicionar uma tabela a ele. Para isso, expanda o Object
Explorer, clicar com a direita em Tables e depois em New Table, como mostra a Figura 8.
Figura 8. Adicionando nova tabela ao banco

Feito isso, será exibida uma tela na qual devemos preencher os campos da tabela,
selecionando também o seu tipo, e se ela aceita valores nulos, como vemos na Figura 9.
Inclua as chaves se possível.

Figura 9. Configurando a nova tabela

Para confirmar a criação da tabela, clique botão com o ícone de um disquete. Em seguida
aparecerá uma janela para nomear a tabela, como mostra a Figura 10. Depois disso ela é
criada.

Figura 10. Salvando a nova tabela


Se se esquecer de algum campo ou de colocar a chave, pode com o click direito do mouse selecionar
design

Chave Primária

Chave primária = Primary keys ou “PK”

As Chaves primárias (em inglês, Primary keys ou “PK”) de um banco de dados relacional são
o (s) conjunto (s) de um ou mais campos, cujos valores, considerando a combinação de
valores em caso de mais de uma chave primária, nunca se repetem na mesma tabela.

Desta forma, elas podem ser usadas como um índice de referência para criar relacionamentos
com as demais tabela do banco de dados (daí vem o nome banco de dados relacional).

Portanto, uma chave primária nunca pode ter valor nulo, nem repetição.

Ela tem que ser um número de identificação único para cada registo e possibilitar a consulta e
o relacionamento dos dados.

É uma boa prática definir a Chave Primária como a primeira coluna da tabela.

Em outras palavras, normalmente, as tabelas possuem uma coluna ou mais contendo valores
capazes de identificar uma linha de forma exclusiva.

Essa (s) coluna (s) recebem o nome de chave primária, cuja finalidade é assegurar a
integridade dos dados da tabela.

Chave estrangeira (Foreign key ou “FK”)


O conceito de chave estrangeira ou chave externa se refere ao tipo de relacionamento entre
distintas tabelas de dados do banco de dados. Uma chave estrangeira é chamada quando há o
relacionamento entre duas tabelas.
Sempre em chave estrangeira vai haver relacionamentos entre tabelas, por exemplo, se uma
tabela que tem uma chave primária de outra tabela.

Campo Auto numeração ou Identity

A coluna de identidade, ou campo de auto numeração, é definida pela propriedade


IDENTITY.

Ao atribuímos essa propriedade a uma coluna, o SQL Server cria números em sequência para
linhas que forem posteriormente inseridas na tabela em que a coluna de identidade está
localizada.

É importante destacar que uma tabela pode ter somente uma coluna de identidade.

Além disso, o valor de uma coluna desse tipo é gerado automaticamente pelo SQL Server;
não podemos alterá-lo ou inseri-lo.

Criação de tabelas

A partir do SSMS selecione tabela e com clique direito do mouse, escolha a opção tabela.
Será aberta a janela em tela, para que seja informado o nome da coluna, o seu data type e se
ele aceita nulo ou não.
Criar tabela cliente
Ao criar a tabela cliente, observe que a coluna cliente_id é uma chave primaria,
portanto não aceita campos nulos e deve ser definido como chave primária para isso
clique com o botão direito do mouse e escolha a opção set primary key e ainda defina
como identity.

Para isso utilize o column propriety da janela do sql SSMS. Na opção identity
especification informe que o campo é identity com incremento 1. Introduza os restantes
campos de acordo com a tabela desenhada.

Após informar todos os dados clique no botão save e será aberta uma janela para
informar o nome da tabela neste caso cliente. Veja que ao clicar em tabelas no object
explorer aparece a tabela cliente criada no banco de dados.
Crie as demais tabelas do nosso modelo do banco de dados

Criadas as tabelas, insira um registo na tabela cliente.


No object explorer selecione a tabela desejada e escolha a opção select top 200 linhas
Inserir os dados manualmente, incluir os tipos de dados. Após criar todas tabelas, pode
elimina-las.
Apagando Tabelas com SQL Server Management Studio
No object explorer selecionar a tabela desejada, com botão direito do mouse escolher a
opção delete e na janela delete basta selecionar opcao close existing conections e clique
em ok. Repita este procedimento para as demais tabelas do banco.
Em seguida remova o banco de dados. Selecionar o banco, clicar com o botão direito do
mouse e clicar em opção delete. Na janela de delete Apos confirmação o banco é
apagado e já não aparece no object explorer.
SQL Server Management Studio - Chave primária e estrangeira
Para escolher uma das colunas como chave primária, faça o seguinte

Observe que somente o tipo int é válido para ser uma PK.

Para fazer referência, em outra tabela, a essa chave como chave estrangeira, vá na outra
tabela e clique com o botão direito na pasta Keys e em New Foreign Key.

Clique no quadrado com três pontos, lá, poderá encontrar graficamente, a chave primária a
ser referida.

Na primeira coluna, deve indicar a fonte da chave estrangeira e, na segunda, para onde será
copiada na tabela onde ela é estrangeira (por consequência, deve, também, criar uma coluna
para receber a chave estrangeira sendo do tipo int).
4. IMAGINE QUE FOI CONTRATADO POR UMA EMPRESA DE CONSULTORIA PARA CRIAR UM SISTEMA
DE GESTAO DE BASE DE DADOS DAS SUAS VENDAS. CRIE A RESPECTIVA BASE DE DADOS DE
NOME EXEMPLO20032023 COM O SEGUINTE:
a) UM ARQUIVO PRINCIPAL
b) CINCO ARQUIVOS SECUNDARIOS
c) UM ARQUIVO DE LOG.
d) ESTA BASE DE DADOS DEVE TER DOIS FILEGROUP DOS QUAIS o PRIMEIRO FILEGROUP
DENOMINADO VENDAS GROUP 1 CONTEM OS ARQUIVOS 2 e 3 E o SEGUNDO FILEGROUP
DENOMINADO VENDAS GROUP 2 CONTEM OS ARQUIVOS 4 e 5
e) Certifique-se que vai usar o caminho certo para o alojamento desta base de
dados.

Resolução

CREATE DATABASE Exemplo20032023


ON PRIMARY
(

NAME = exemplo_prim, FILENAME = 'C:\Program Files\Microsoft SQL Server\


MSSQL13.SQLEXPRESS\MSSQL\DATA\testdat_exemplo.mdf ',
SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15%
),

FILEGROUP VendasGroup1 --File grupo secundário


(
NAME = exemplo_sec1, FILENAME = 'C:\Program Files\Microsoft SQL Server\
MSSQL13.SQLEXPRESS\MSSQL\DATA\testlog_exemplo_sec1.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 15%
),

(
NAME = exemplo_sec2, FILENAME = 'C:\Program Files\Microsoft SQL Server\
MSSQL13.SQLEXPRESS\MSSQL\DATA\testlog_exemplo_sec2.ndf',
SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5%
),

(
NAME = exemplo_sec3, FILENAME = 'C:\Program Files\Microsoft SQL Server\
MSSQL13.SQLEXPRESS\MSSQL\DATA\testlog_exemplo_sec3.ndf',
SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15%
),

FILEGROUP VendasGroup2 --segundo filegroup


(
NAME = exemplo_sec4, FILENAME = 'C:\Program Files\Microsoft SQL Server\
MSSQL13.SQLEXPRESS\MSSQL\DATA\testlog_exemplo_sec4.ndf',
SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5
),

(
NAME = exemplo_sec5, FILENAME = 'C:\Program Files\Microsoft SQL Server\
MSSQL13.SQLEXPRESS\MSSQL\DATA\testlog_exemplo_sec5.ndf',
SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5%
)

LOG ON
(
NAME = exemplo_log, FILENAME = 'C:\Program Files\Microsoft SQL Server\
MSSQL13.SQLEXPRESS\MSSQL\DATA\testlog_exemplo.ldf',
SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB);
5. Criar database Incluindo filestream

-- Crie uma base de dados com default filegoup, flegroup filestream e log
file. Especifique o autocrescimento, tamanho minimo e maximo.

USE master;
GO
-- primary data file.
CREATE DATABASE escola
ON PRIMARY
( NAME='escola_Primary',
FILENAME=
'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\
escola_Prm.mdf',
SIZE=4MB, MAXSIZE=10MB, FILEGROWTH=1MB),
FILEGROUP escola_FG1
( NAME = 'escola_FG1_Dat1',
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\
escola_FG1_1.ndf',
SIZE = 1MB, MAXSIZE=10MB, FILEGROWTH=1MB),
( NAME = 'escola_FG1_Dat2',
FILENAME =
'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\
escola_FG1_2.ndf',
SIZE = 1MB, MAXSIZE=10MB, FILEGROWTH=1MB),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM
( NAME = 'escola_FG_FS',
FILENAME = 'c:\Data\filestream1')
LOG ON
( NAME='escola_log',
FILENAME =
'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\
escola.ldf',
SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB);
GO

ALTER DATABASE escola


MODIFY FILEGROUP escola_FG1 DEFAULT;
GO

-- Criar tabela no filegroup definido pelo usuario


USE escola;

CREATE TABLE Minha_Tabela


(
coluna_a int PRIMARY KEY,
Coluna_b char(8)
)
ON escola_FG1;
GO

-- Criar tabela no filegroup filestream

CREATE TABLE Minha_Tabel_FS


(
Coluna_a int PRIMARY KEY,
coluna_b VARBINARY(MAX) FILESTREAM NULL
)
GO
6. Criar uma database de nome teste com quatro ficheiros em dois filegroup
(FILEGROUP FgTesteSave e FILEGROUP FgTesteDocuments), este ultimo
filegroup contem um filestream default. Cada filegroup deve ser armazenado em
files difererntes

CREATE DATABASE Teste ON PRIMARY


(

NAME = 'Teste_Data', FILENAME = 'c:\Program Files\Microsoft SQL Server\


MSSQL.1\MSSQL\data\Teste.mdf',

SIZE = 5MB, MAXSIZE = UNLIMITED, FILEGROWTH = 5MB

),

FILEGROUP FgTesteSave

NAME = 'Teste_Data2', FILENAME = 'c:\Program Files\Microsoft SQL Server\


MSSQL.1\MSSQL \ data_save\Teste.ndf',

SIZE = 5MB, MAXSIZE = UNLIMITED, FILEGROWTH = 5MB

),

FILEGROUP FgTesteDocuments CONTAINS FILESTREAM DEFAULT

NAME = 'Teste_Documents', FILENAME = 'c:\Program Files\Microsoft SQL


Server\MSSQL.1\MSSQL \Teste\document'

LOG ON

NAME = 'Teste_Log', FILENAME = 'c:\Program Files\Microsoft SQL Server\


MSSQL.1\MSSQL \ log\Teste.ldf',

SIZE = 5MB, MAXSIZE = 20MB, FILEGROWTH = 15MB

GO
nota: filestream - armazena dados binários ou dados não estruturados como documentos e
imagens,. Armazena objetos do tipo (BLOB -Binary Large Object ) com o tipo
VARBINARY(MAX).

7. Um supermercado pretende entrar para o mercado oferecendo melhores servicos. Para tal,
contratou a turma A para implementar o sistema.

Utilize a sintaxe a seguir para criar a tabela do exercicio e insira os produtos “arroz”, “feijao” e
“ovos”, tendo em conta que para cada um deles, o cliente solicitou 5 Kg, 4 KG, 2 duzias
respectivamente.

Referir que o preco unitario do arroz é 50 MT, do feijao são 100 MT e os ovos 105 MT. O tipo de
produtos de cada item deve ser “produtos alimentares”.

COPIE O CODIGO PARA O SQL SERVER E UTILIZE ESTA TABELA PARA OS EXERCICIOS
CREATE TABLE tbl_produto_super;
(
Codigo_produto INT PRIMARY KEY IDENTITY (1,1),
Nome_produto VARCHAR (50) NOT NULL,
Tipo_produto VARCHAR (30) NOT NULL UNIQUE,
Preco_unitario MONEY
Quantidade DATATIME NOT NULL,
Preco_total MONEY NOT NULL
)

Agora insira os dados

Insert into TBL_PRODUTO_SUPERMERCADO VALUES ('ARROZ', 'PRODUTO ALIMENTAR', '50','5',


'250'),('FEIJAO', 'PRODUTO ALIMENTAR', '100','4','400'),('OVOS', 'PRODUTO ALIMENTAR',
'105','2', '210');

Resolucao:
Para solucionar o problema, primeiro cria a tabela no sql server
a) Criar a tabela TBL_PRODUTO_SUPERMERCADO no sql server e insira os valores solicitados no
exercício 1.
CREATE TABLE TBL_PRODUTO_SUPERMERCADO;
(
Codigo_produto INT PRIMARY KEY IDENTITY (1,1),
Nome_produto VARCHAR (50) NOT NULL,
Tipo_produto VARCHAR (30) NOT NULL UNIQUE,
Preco_unitario MONEY,
Quantidade INT NOT NULL,
Preco_total MONEY NOT NULL
)

AO CRIAR A TABELA GEROU UM ERRO. O PRIMEIRO ERRO ENCONTRADO FOI PORQUE EXISTE UM PONTO
E VIRGULA (;) QUE ESTA NA PRIMEIRA LINHA (linha do create). REMOVA O PONTO E VIRGULA
(;) E TENTE CRIAR DE NOVO.

O SEGUNDO ERRO VAI OCORRER PORQUE FALTA UMA VIRGULA APOS O TIPO DE DADOS “MONEY”

O PASSO A SEGUIE É CERTIFICAR-SE QUE ESTA NA BASE DE DADOS CERTA


USE loja_brinquedos

Como pode ver, a tabela foi criada. Agora insira os produtos que o ciente solicitou.

Insert into TBL_PRODUTO_SUPERMERCADO VALUES ('ARROZ', 'PRODUTO ALIMENTAR', '50','5',


'250'),('FEIJAO', 'PRODUTO ALIMENTAR', '100','4','400'),('OVOS', 'PRODUTO ALIMENTAR',
'105','2', '210');

APARECERA UMA MENSAGEM DE ERRO.

COMO VE, NÃO FOI POSSIVEL INSERIR OS DADOS PORQUE ESTA TENTANDO INSERIR TRES PRODUTOS
DA CATEGORIA “PRODUTOS ALIMENTARES” ENQUANTO FOI DEFINIDO O TIPO DE PRODUTO COMO
UNIQUE E UNIQUE SIGNIFICA QUE O REGISTO DEVE SER ÚNICO.

CORRIJA O ERRO.

A SOLUCAO SERA ALTERAR A COLUNA QUE TEM O TIPO DE RESTRICAO UNIQUE.

--ALTERAR A COLUNA QUE TEM CONSTRAINT


ALTER TABLE TBL_PRODUTO_SUPERMERCADO ADD Tipo_produtos VARCHAR (30) NOT NULL; OU
ALTER TABLE TBL_PRODUTO_SUPERMERCADO ALTER COLUMN Tipo_produtos VARCHAR (30)

APOS APAGAR VOLTE A INSERIR.

DE FACTO A RESTRICAO SERA APAGADA NA TABELA MAS NÃO VAI CONSEGUIR INSERIR, POIS AINDA
EXISTEM REFERENCIAS ASSOCIADAS A CONSTRAINT. UMA DAS SOLUCOES PODE SER EXECUTAR UM
PROCEDIMENTO ARMAZENADO (exec sp_helpconstraint) PARA PROCURAR A CONTRAINT FICANDO:

exec sp_helpconstraint TBL_PRODUTO_SUPERMERCADO


O PASSO SEGUINTE E SO APAGAR A CONSTRAINT COM O COMANDO SEGUINTE.

--ALTERAR A CONSTRAINT
alter table TBL_PRODUTO_SUPERMERCADO DROP CONSTRAINT UQ__TESTE__B6FCAAA252F153FA

TENTE INSERIR OS DADOS NORMALMENTE - DADOS INSERIDOS COM SUCESSO

OS DADOS SOLICITADOS PELO CLIENTE FORAM INSERIDOS COM SUCESSO.

INSIRA OS RESTANTES VALORES.


Insert into TBL_PRODUTO_SUPERMERCADO VALUES
('ALHO', 'PRODUTO ALIMENTAR', '100','5', '500'),('PEIXE', 'PRODUTO ALIMENTAR',
'150','2', '300'),('MILHO', 'CEREAL', '55','5', '275'),('PIPOCAS', 'CEREAL', '50','5',
'250'),('CANELA', 'TEMPEROS', '10','5', '50'),('ACAFRAO', 'TEMPERO', '50','5', '250'),
('OLEO', 'PRODUTO ALIMENTAR', '750','5', '250'),('LIXIVIA', 'DETERGENTE', '100','5',
'500'),('PAO', 'PRODUTO ALIMENTAR', '50','5', '250'),('SABAO', 'DETERGENTE', '5','5',
'25'),('FARINHA', 'PRODUTO ALIMENTAR', '50','5', '250'),('FRANGO', 'PRODUTO
ALIMENTAR', '150','5', '750'),('OMO', 'DETERGENTE', '90','5', '450'),
('OVOS', 'PRODUTO ALIMENTAR', '100','5', '500');
TAMBEM FORAM INSERIDOS COM SUCESSO.

b) Adicionar uma nova coluna denominada observações


--Adicionar a coluna de observacoes
ALTER TABLE TBL_PRODUTO_SUPERMERCADO ADD observacoes CHAR (100)

c) Modifique o nome da coluna de preco_unitario para preco_unit e observações para


observação.

Modificar coluna de observacoes para observacao


EXEC SP_RENAME 'dbo.TBL_PRODUTO_SUPERMERCADO.observacoes','observacao'
GO

EXEC SP_RENAME 'dbo.TBL_PRODUTO_SUPERMERCADO.preco_unitario','preco_unt'


GO

d) Modificar a coluna referente ao tipo de dados UNIQUE para NOT NULL apenas.

ALTER TABLE TBL_PRODUTO_SUPERMERCADO ALTER COLUMN Tipo_produtos VARCHAR (30) ou


--ALTER TABLE TBL_PRODUTO_SUPERMERCADO ADD Tipo_produtos VARCHAR (30) NOT NULL;

Exec sp_helpconstraint TBL_PRODUTO_SUPERMERCADO

ALTER TABLE TBL_PRODUTO_SUPERMERCADO DROP CONSTRAINT UQ__TESTE__B6FCAAA252F153FA

e) Renomeie a tabela “TBL_PRODUTO_SUPERMERCADO “para “TBL_PRODUTO”.


--renomear tabelas
SP_RENAME 'TBL_PRODUTO_SUPERMERCADO','TBL_PRODUTO';

Quando se utiliza um stored procedure para alterar a estrutura da tabela ou da coluna,


o sql server compila com exito mas adverte sobre as suas consequencias. Veja a
mensagem.

f) Renomeie a coluna quantidade para quant

Sp_rename 'TBL_PRODUTO.quantidade','quant','COLUMN';
g) Excluir a coluna “observações”

--Apagar uma coluna


ALTER TABLE dbo. TBL_PRODUTO DROP COLUMN observacao

PARTE II - VIEWS

8. Crie a tabela TBL_Produto_VIEW e insira os dados

CREATE TABLE TBL_Produto_VIEW


(
Codigo_produto INT PRIMARY KEY IDENTITY (1,1),
Nome_produto VARCHAR (50) NOT NULL,
Tipo_produto VARCHAR (30) NOT NULL,
Preco_unitario MONEY,
Quantidade INT NOT NULL,
Preco_total MONEY NOT NULL
)

insert into TBL_Produto_VIEW (Nome_produto, Tipo_produto, Preco_unitario, Quantidade,


Preco_total) values ('ALHO', 'PRODUTO ALIMENTAR', '100', '5', '500'), ('PEIXE',
'PRODUTO ALIMENTAR', '150', '2', '300'), ('MILHO', 'PRODUTO ALIMENTAR ESPECIAL',
'175', '10', '750'), ('PIPOCAS', 'CEREAL', '50', '5', '250'), ('CANELA', 'TEMPEROS',
'10', '5', '50'), ('ACAFRAO', 'TEMPEROS', '50', '5', '250'), ('OLEO', 'PRODUTO
ALIMENTAR', '750', '1', '750'), ('LIXIVIA EM PO', 'DETERGENTE', '100', '5', '500'),
('FARINHA', 'PRODUTO ALIMENTAR', '50', '5', '250'), ('FRANGO', 'PRODUTO
ALIMENTAR', '150', '5', '750'), ('OMO', 'DETERGENTE', '100', '5', '500'), ('OVOS',
'PRODUTO ALIMENTAR', '100', '5', '500'), ('ZINCO', 'MATERIAL DE CONSTRUCAO', '700',
'5', '3500'), ('ESPARGUETE DE ALHO', 'PRODUTO ALIMENTAR ESPECIAL', '700', '5',
'3500'), ('BATEDEIRA', 'ELETRODOMESTICO', '2100', '5', '10500'), ('CHALEIRA',
'ELETRODOMESTICO', '800', '5', '40000');
RESULTADO:
9. Crie uma view que lista todos produtos solicitado por um cliente, cujo tipo de produto é
“produto alimentar”.
CREATE VIEW lista_produtos_exercicio
AS
SELECT codigo_produto, nome_produto, tipo_produto, preco_unitario, quantidade,
preco_total
FROM TBL_Produto_VIEW
WHERE tipo_produto = 'produto alimentar'

--Para visualizer os produtos listados

select * from lista_produtos_exercicio

10. Insira os seguintes dados na tabela padrao e veja o que acontece com a view.
insert into TBL_Produto_VIEW
(Nome_produto, Tipo_produto, Preco_unitario, Quantidade, Preco_total)
values ('televisor', 'eletrodomestico', '5000', '2', '10000')

11. Insira os dados na view

insert into lista_produtos_exercicio


(Nome_produto, Tipo_produto, Preco_unitario, Quantidade, Preco_total)
values ('teste', 'eletrodomestico', '5000', '2', '10000')

12. CRIA UMA VIEW QUE MOSTRE OS PRODUTOS COMPRADOS PELO CLIENTE CUJO TIPO_PRODUTO
SEJA DETERGENTE

CREATE VIEW lista_produtos_exercicio


AS
SELECT NOME_PRODUTO, TIPO_PRODUTO, PRECO_TOTAL
FROM TBL_Produto_VIEW
WHERE TIPO_PRODUTO LIKE 'DETERGENTE'

VISUALISANDO OS DADOS DA VIEW


MODIFIcando os dados da view.
13. Se alterar a tabela principal, facilmente visualizara a alteracao na view

Insira os dados na tabela principal


Insert into TBL_Produto_VIEW VALUES ('ZINCO', 'MATERIAL DE CONSTRUCAO', '1000','5',
'5000')
Insert into TBL_Produto_VIEW VALUES ('POVIM', 'DETERGENTE', '1000','5', '5000')

CONSULTE A VIEW

Agora adicine uma coluna a tabela principal


ALTER TABLE TBL_Produto_VIEW ADD observacoes varchar (100)

Note que foi inserido um dado na tabela principal e o mesmo


reflectiu-se na view. Foi adicionada uma coluna de nome observacoes
na tabela principal e a mesma não se reflecte na view. Alteracoes na
estrutura da tabela não se reflecte na view mas altearcoes de dados
são reflectidos na view.

Altere os dados da view


UPDATE lista_produtos_exercicio
set nome_produto = 'LIXIVIA EM PO'
where tipo_produto = 'DETERGENTE'
and preco_total > = 500
consulte a view. A mesma foi actualizada
TABELA ORIGINAL

UPDATE lista_produtos_exercicio
set nome_produto = 'batata doce'
where tipo_produto = 'PRODUTO ALIMENTAR' and preco_total = 150

UPDATE TBL_Produto_VIEW
set nome_produto = 'ALHO PORO'
where tipo_produto = 'CEREAL VERDE' and preco_total = 500

Podemos eliminar uma linha na view


DELETE from lista_produtos_exercicio WHERE PRECO_TOTAL='25.00'

Parte III – PARTICIONAMENTO DE TABELAS

Para particionar tabelas deve opcionalmente, criar um grupo de arquivo (filegroup), em


seguida Adicionar um file para cada filegroup, depois criar a funcao de
particionamento, em seguida criar o esquema de particao e por fim Criar a tabela
particionada

Passo 1:
a) criar um grupo de arquivo (filegroup)
--adicione quatro novos filegroups na base de dados SISTEMA_SAUDE_TESTE_PARTICAO
ALTER DATABASE SISTEMA_SAUDE_TESTE_PARTICAO
ADD FILEGROUP test1fg;
GO

b) --criar um arquivo de dados que vai ser veinculado ao grupo de arquivos test1fg.
--Adicionar um file para cada filegroup
ALTER DATABASE SISTEMA_SAUDE_TESTE_PARTICAO
ADD FILE
( name = test1dat1,
Filename = 'C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\
arquiv_2024.ndf', size = 5MB, maxsize = 100MB, FILEGROWTH =5MB )
to filegroup test1fg

Passo 2:
--criar a funcao de particao chamada myRangePF1
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT for VALUES (100, 300, 1000);
GO

Passo 3:
--cria o esquema de particao chamado myRangePS1 que aplica myRangePF1 aos quatro
filegroups criados abaixo

CREATE PARTITION SCHEME myRangePS1


AS PARTITION myRangePF1
to (test1fg,test1fg, test1fg, test1fg)
GO

to (test1fg,test1fg, test1fg, test1fg)- neste caso armazena tudo num unico filegroup.
Se pretender armazenar em varios faça: to (test1fg,test2fg, test3fg, test4fg)

Execute o script

Passo 4
--Cria a tabela particionada chamada partitiontable que usa myRangePS1 Na particao
col1
CREATE TABLE PartitionTable (col1 int PRIMARY KEY, col2 char (10))
ON myRangePS1 (col1);
GO

--Agora insira dados nessa tabela que acabou de criar

INSERT INTO PartitionTable (col1, col2) -- Inserido na Partição 1


VALUES ('10', 'teste');
INSERT INTO PartitionTable (col1, col2) -- Inserido na Partição 2
VALUES ('13', 'teste1');
INSERT INTO PartitionTable (col1, col2) -- Inserido na Partição 2
VALUES ('15', 'teste2');
GO
Parte Iv – STORED PROCEDURE (SP) -
Procedimentos armazenados
1. Criar e executar um SP simples que lista todos produtos do supermercado.

Criar a tabela
CREATE TABLE tbl_produto_super
(
Codigo_produto INT PRIMARY KEY IDENTITY (1,1),
Nome_produto VARCHAR (50) NOT NULL,
Tipo_produto VARCHAR (30) NOT NULL,
Preco_unitario MONEY,
Quantidade INT NOT NULL,
Preco_total MONEY NOT NULL
)

Mostrar dados inseridos


Resultado:
Criar stored procedure

CREATE PROCEDURE LISTA_PRODUTOS_LOJA


AS
BEGIN
SELECT
Codigo_produto, Nome_produto,Tipo_produto, Preco_unitario, Quantidade,
Preco_total
FROM tbl_produto_super

END;

Chamada do procedimento

EXEC LISTA_PRODUTOS_LOJA;

Resultado

2. Modifique o SP mostrando apenas o tipo de produto como ‘produto alimentar’ e


ordene os produtos por ordem crescente ou seja, Modifique o stored procedure de
modo a listar apenas produtos com a categoria “produto alimentar”

ALTER PROCEDURE LISTA_PRODUTOS_LOJA


AS
BEGIN
select Codigo_produto, Nome_produto,Tipo_produto, Preco_unitario, Quantidade,
Preco_total
FROM tbl_produto_super
Where Tipo_produto = 'PRODUTO ALIMENTAR'
order by Nome_produto ASC
END;

--CHAMADA DO PROCEDIMENTO
exec LISTA_PRODUTOS_LOJA;

Resultado:

Stored procedure com passagem de um


parametro
3. Crie um procedimento cujo o preço total é menor que o preco informado. Para
tal, precisa adicionar um parâmetro (@min_preco) ao Stored Procedure por forma
a encontrar os produtos cujos preços totais forem menores que um preço
introduzido.

ALTER PROCEDURE LISTA_PRODUTOS_LOJA (@min_preco AS DECIMAL)


AS
BEGIN
select Codigo_produto, Nome_produto,Tipo_produto, Preco_unitario, Quantidade,
Preco_total
FROM tbl_produto_super
Where preco_total < = (@min_preco)
order by Nome_produto
END;

exec LISTA_PRODUTOS_LOJA 500;

4. Altere o procedimento para que ele possa passar oum parametro cujo produto faz
parte da categoria de DETERGENTES.
ALTER PROCEDURE LISTA_PRODUTOS_LOJA (@Tipo_produto AS varchar (20))
AS
BEGIN
select Codigo_produto, Nome_produto,Tipo_produto, Preco_unitario, Quantidade,
Preco_total
FROM tbl_produto_super
Where Tipo_produto = (@Tipo_produto)
order by Nome_produto
END;

use loja_brinquedos;
exec LISTA_PRODUTOS_LOJA detergente;

stored procedure com varios parametros


5. ESCOLHER O PRODUTO QUE ESTEJA ENTRE UM PARAMETRO MINIMO E MAXIMO

CREATE PROCEDURE sp_mostrar_produtominmax (@min_preco AS decimal, @max_preco AS


decimal)
AS
BEGIN
SELECT nome_produto, preco_total
FROM tbl_produto_super
WHERE preco_total >= (@min_preco) AND preco_total <= (@max_preco)
ORDER BY preco_total;
END;

EXECUTE sp_mostrar_produtominmax 500, 1000;

Caso os SP tenham vários parâmetros, o ideal é usar os procedimentos armazenados


usando parâmetros nomeados.

EXECUTE sp_mostrar_produtominmax @min_preco = 500, @max_preco = 1000;


Criar parametro de texto:
6. Localiza o tipo de produto que esta na faixa de 10 e 5000 e cujo tipo de
produto contenha a palavra temp.

create PROCEDURE sp_encontrar_parametro_texto (@min_preco AS DECIMAL, @max_preco AS


DECIMAL, @tipo_produto AS VARCHAR(max))
AS
BEGIN
SELECT nome_produto, preco_total
FROM tbl_produto_super
WHERE preco_total >= @min_preco AND Preco_total <= @max_preco
AND tipo_produto LIKE '%'+@tipo_produto+'%'
ORDER BY preco_total;
END;

EXECUTE sp_encontrar_parametro_texto @min_preco = 10, @max_preco = 5000,


@tipo_produto = '%temp';

Passando parametros opcionais:


7. Crie um procedimento que passa parametros opcionais.

atribuí 0 como o valor padrão (default) para o @min_preco e


atribui 1000 como o valor padrão (default) para o @max_preco.

create PROCEDURE sp_encontrar_produto_opcional (@min_preco AS DECIMAL = 0, @max_preco


AS DECIMAL = 1000, @tipo_produto AS VARCHAR(max))
AS
BEGIN
SELECT nome_produto, Preco_total, tipo_produto
FROM tbl_produto_super
WHERE preco_total>= @min_preco
AND preco_total<= @max_preco
AND tipo_produto LIKE '%' + @tipo_produto + '%'
ORDER BY preco_total;
END;

EXECUTE sp_encontrar_produto_opcional @tipo_produto = 'produto alimentar';


Ou
EXECUTE sp_encontrar_produto_opcional @min_preco = 0, @tipo_produto = 'Produto
alimentar';

O resultado é o mesmo

Null como valor padrao:

CREATE PROCEDURE sp_encontrar_produto8


(@min_preco AS DECIMAL = 0, @max_preco AS DECIMAL = NULL, @nome_produto AS
VARCHAR(max))
AS
BEGIN
SELECT nome_produto, preco_total, Tipo_produto
FROM tbl_produto_super
WHERE preco_total>= @min_preco
AND (@max_preco IS NULL OR Preco_total<= @max_preco)
AND nome_produto LIKE '%' + @nome_produto + '%'
ORDER BY preco_total;
END;

localizar o produto cujos preços são maiores ou iguais a 500 e os nomes contêm a
palavra brinquedo.

EXECUTE sp_encontrar_produto8 @min_preco=500, @nome_PRODUTO ='lho';

--Exercicio
1) Crie um SP de nome “spTotalFuncionarios ” para obter o número total de funcionários
da tabela detalhe de funcionários usando um parâmetro de saída.

Resolucao
--PRIMEIRO CRIAR A TABELA E INSERIR OS DADOS

create table detalhe_funcionarios


(id_funcionario int primary key not null,
nome_funcionario varchar (20),
idade int not null,
apelido varchar (30)
)

-- SEGUNDO CRIAR O PROCEDIMENTO ARMAZENADO

CREATE PROCEDURE spTotalFuncionarios (@FuncCount INT


OUTPUT)

-- parâmetro de saída @FuncCount


AS
BEGIN
SELECT @FuncCount = COUNT(*)
FROM Detalhe_Funcionarios;
END;
--logo que executar esta instrução SQL, um novo SP será criado no banco de dados.

--TERCEIRO PARA EXECUTAR PRECISA DECLARAR A VARIAVEL QUE VAI RECEBER O VALOR
DECLARE @Count int;
Execute spTotalFuncionarios @FuncCount = @Count output;
SELECT @Count AS 'Numero Total de Funcionários';

--Exercicio
2) agora crie um SP denominado “spTotal_produtos ” para obter o número total de
produtos da tabela tbl_produto_super usando um parâmetro de saída.

CREATE PROCEDURE spTotalprodutos (@Countproduto INT OUTPUT)


-- parâmetro de saída
AS
BEGIN
SELECT @Countproduto = COUNT(*)
FROM tbl_produto_super
END;

--execute
DECLARE @Count int;
Execute spTotalprodutos @Countproduto = @Count output;
SELECT @Count AS 'Total de produtos disponiveis';

3) Crie um SP para adicionar novos registos a tabela detalhe do


funcionário. O SP deverá conter 4 parâmetros de entrada (@Id, @Nome,
@idade e @apelido)

CREATE PROCEDURE spAddNewFunc (


-- parametros de entrada
@Id_funcionario INT, @Nome_funcionario VARCHAR(50),
@idade VARCHAR(10), @apelido VARCHAR(100) ) AS
BEGIN
INSERT INTO detalhe_funcionarios (id_funcionario,
nome_funcionario, idade, apelido)
VALUES (@Id_funcionario, @Nome_funcionario, @idade,
@apelido);
END;
--logo que executar esta instrução SQL, um novo SP será
criado no banco de dados.

EXECUTE spAddNewFunc 20, 'leao','95','americano';

select * from detalhe_funcionarios

4) Crie um SP para adicionar novos registos a tabela


tbl_produto_super. O SP conterá 6 parâmetros de entrada (@Id, @Nome,
@Genero e @Cidade)
CREATE PROCEDURE spAddNovoproduto (@Nome_produto
VARCHAR(50),@tipo_produto VARCHAR(10), @preco_unitario
decimal,@quantidade int, @preco_total decimal, @observacoes
VARCHAR(100) )
-- parametros de entrada
AS
BEGIN
INSERT INTO tbl_produto_super (Nome_produto, Tipo_produto,
preco_unitario, Quantidade, Preco_total, observacoes)
VALUES (@Nome_produto, @Tipo_produto, @preco_unitario,
@Quantidade, @Preco_total, @observacoes)
END;
--logo que executar esta instrução SQL, um novo SP será criado no
banco de dados.

EXECUTE spAddNovoproduto 'massa esparguete','produto


especial','500', '10', '50000', 'donativos';

select * from tbl_produto_super

5) Criar SP para actualizar registos na tabela detalhe de


funcionarios

CREATE PROCEDURE spUpdateFuncById


(
-- parametros de entrada
@Id_funcionario INT, @Nome_funcionario VARCHAR(50),
@idade VARCHAR(10), @apelido VARCHAR(100)
) AS
BEGIN
UPDATE detalhe_funcionarios
Set nome_funcionario = @Nome_funcionario, idade = @idade,
apelido = @apelido
WHERE id_funcionario = @Id_funcionario
END;

Execute spUpdateFuncById 1,' florentina','55','valesk'

select * from detalhe_funcionarios


6) Criar um SP para actualizar registos a partir do nome do produto
CREATE PROCEDURE spUpdateprodutoporid (
@Nome_produto VARCHAR(50), @tipo_produto VARCHAR(10), @preco_unitario decimal,
@quantidade int,
@preco_total decimal, @observacoes VARCHAR(100) )
-- parametros de entrada
AS
BEGIN
UPDATE tbl_produto_super
Set Nome_produto = @Nome_produto, Tipo_produto = @Tipo_produto, preco_unitario =
@preco_unitario,
Quantidade = @Quantidade, Preco_total = @Preco_total, observacoes = @observacoes

WHERE Nome_produto = @Nome_produto


END;

EXECUTE spUpdateprodutoporid 'MILHO','produto Para dieta','75', '10', '750', 'para


alimentacao escolar';

select * from tbl_produto_super


7) Criar SP para excluir registos na tabela detalho de funcionarios

create PROCEDURE spDeleteFuncById


(
-- parametros de entrada
@Id_funcionario INT
) AS
BEGIN
DELETE FROM detalhe_funcionarios
WHERE id_funcionario = @Id_funcionario
END;

select * from detalhe_funcionarios


EXECUTE spDeleteFuncById 4;

8) Criar SP para excluir registos na tabela produtos

CREATE PROCEDURE spDeleteprodutopornome ( @Nome_produto varchar (39) )


-- parametros de entrada
AS
BEGIN
DELETE FROM tbl_produto_super
WHERE Nome_produto = @Nome_produto
END;

EXECUTE spDeleteprodutopornome oleo;


select * from tbl_produto_super

9) crie um procedimento para inserir o salario de trabalhadores da empresa ABC

--Inserir o salario do trabalhador

--primeiro crie a tabela sem o campo salario do trabalhador

create table salario_trabalhador


(
codigo int primary key not null,
nome varchar (30) not null,
localizacao varchar (20) not null
)

--actualize a tabela acrescentando o campo salario.


alter table salario_trabalhador add salario decimal

insert into salario_trabalhador


values ('07','gim','tete','10.00'),
('02','pedro','niassa','100.00'),
('03','joao','matola','10000.00'),
('04','tiago','zambezia','10900.00'),
('05','maria','inhambane','10500.00'),
('06','marta','sofala','10600.00')

CREATE procedure Procedure_insert (@codigo int, @nome VARCHAR(30), @localizacao


VARCHAR(20), @salario decimal)
AS
BEGIN
INSERT INTO salario_trabalhador (CODIGO, nome, localizacao, salario)
VALUES (@CODIGO, @nome, @localizacao, @salario)
END

EXECUTE Procedure_insert '25','HERMAN LDE ROSA','TETE','10000'

SELECT * FROM SALARIO_TRABALHADOR

10) crie um procedimento para actualizar o salario de trabalhadores da empresa ABC

--actualizar salario
CREATE PROCEDURE Updatesalario (@codigo int, @salario money)
AS
BEGIN
UPDATE dbo.salario_trabalhador
SET Salario = @salario
WHERE codigo = @codigo
END

EXEC dbo.Updatesalario @codigo = 7, @Salario = 18000


-- or
EXEC dbo.Updatesalario 7, 18000

select * from salario_trabalhador


Trabalho em grupo

Enunciado: por enviar


Cada grupo de trabalho deverá fazer uma descrição do sistema de informação a ser
desenvolvido. A descrição deverá ser apresentada num papel A4 com as margens
(topo, fundo, esquerda e direita) 2,5cm.
– Espaçamento entre parágrafos = 6pt; Espaçamento entre linhas, dentro
do parágrafo = 1,5 lines ou Single.
– Tipo de letra, para o texto normal, = Times New Roman, com tamanho
= 12.
– Número de páginas com a descrição: 2 ou 3.
13. Proposta de temas atribuídos aos grupos:

• Sistema de Gestão de Transportes Semi-colectivos,


• Sistema de Gestão de Parques de Estacionamento,
• Sistema de Gestão de Bibliotecas,
• Sistema de Gestão de Consultas Médicas,
• Sistema de Gestão de Campeonatos de Futebol,
• Sistema de Gestão de Stock,
• Sistema de Gestão de Vídeo Clube,
• Sistema de Gestão de Imposto Predial,
• Sistema de Gestão Hoteleira.

Você também pode gostar