Escolar Documentos
Profissional Documentos
Cultura Documentos
USE BancoDados
GO
CREATE PROCEDURE Busca --- Declarando o nome da procedure
@CampoBusca VARCHAR (20) --- Declarando variável (note que
utilizamos o @ antes do nome da variável)
AS
SELECT Codigo, Descrição --- Consulta
FROM NomeTabela
WHERE Descricao = @CampoBusca --- Utilizando variável como filtro
para a consulta
EXECUTE Busca 'DEVMEDIA'
O que nos retornaria o seguinte resultado:
Fig
ura 1. Retorno do stored procedure.
Especificar parâmetros
USE AdventureWorks2012;
GO
-- Passing values as constants.
EXEC dbo.uspGetWhereUsedProductID 819, '20050225';
GO
-- Passing values as variables.
DECLARE @ProductID int, @CheckDate datetime;
SET @ProductID = 819;
SET @CheckDate = '20050225';
EXEC dbo.uspGetWhereUsedProductID @ProductID, @CheckDate;
GO
-- Try to use a function as a parameter value.
-- This produces an error message.
EXEC dbo.uspGetWhereUsedProductID 819, GETDATE();
GO
-- Passing the function value as a variable.
DECLARE @CheckDate datetime;
SET @CheckDate = GETDATE();
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;
GO
USE AdventureWorks2012;
GO
IF OBJECT_ID('Sales.uspGetSalesYTD', 'P') IS NOT NULL
DROP PROCEDURE Sales.uspGetSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetSalesYTD
@SalesPerson nvarchar(50) = NULL -- NULL default value
AS
SET NOCOUNT ON;
Execute usp_GetList para retornar uma lista de produtos (bicicletas) da Adventure Works
que custam menos que $ 700. Os parâmetros OUTPUT @cost e @compareprices são
usados com linguagem de controle de fluxo para retornar uma mensagem na janela
Mensagens.
Observação
A variável OUTPUT deve ser definida durante a criação do procedimento e também
durante o uso da variável. O nome de parâmetro e o nome de variável não precisam
coincidir. Porém, o tipo de dados e o posicionamento do parâmetro precisam ser
correspondentes (a menos que @listprice= variable seja usado).
DECLARE @ComparePrice money, @Cost money ;
EXECUTE Production.uspGetList '%Bikes%', 700,
@ComparePrice OUT,
@Cost OUTPUT
IF @Cost <= @ComparePrice
BEGIN
PRINT 'These products can be purchased for less than
$'+RTRIM(CAST(@ComparePrice AS varchar(20)))+'.'
END
ELSE
PRINT 'The prices for all products in this category exceed
$'+ RTRIM(CAST(@ComparePrice AS varchar(20)))+'.';
END
GO
Update/Delete com INNER em MS-SQL Server
Autor : Antonio Carlos Ferreira de Azevedo Postado em : 21/07/2018
O segredo para fazermos um UPDATE ou DELETE com um INNER em uma outra tabela é utilizarmos a clausula
FROM, para que possamos relacionar as tabelas.
Segue exemplos abaixo:
-- update
UPDATE tblclientes SET idcidade = ende .idcidade
FROM tblclientes cli
INNER JOIN tblendereco ende ON ende.idendereco = cli.idendereco
-- delete
DELETE tblclientes
FROM tblclientes cli
INNER JOIN tblendereco ende ON ende.idendereco = cli.idendereco
Criando Tabelas Temporarias em MS-SQL
São criada em TempDB podendo ser classificadas em Locais e Globais, os principais tipos são:
Locais, utilizam o prefixo '@', são como matrizes e ficam restritas ao escopo local de uma rotina, como uma
variavel local comum.
Locais, utilizam o prefixo '#' e possuem visibilidade restrita a conexão responsável por sua criação, outras conexòes
não encergam esta tabela e dasaparecem quando nenhuma conexão as usam.
Globais, Temporarias são criadas com o prefixo '##' e são visíveis por todas as conexôes, são adicionadas no log.
Para criar uma tabela temporária utilizamos o comando CREATE TABLE e para apagar o comando DROP TABLE,
assim como faríamos para criar uma tabela normal.
Segue exemplo para criação de uma tabela temporaria:
CREATE TABLE tempdb.dbo.#temp
(
id INT,
depto VARCHAR(100) COLLATE Latin1_General_CI_AS,
cargo VARCHAR(80) COLLATE Latin1_General_CI_AS
)
Para verificar se a tabela ainda existe e aparga-la utilize o seguinte comando:
IF OBJECT_ID('tempdb.dbo.#temp', 'U') IS NOT NULL
BEGIN
DROP TABLE #temp
END
Para manipular a tabela utilize os comandos normalmente:
-- select
SELECT * FROM #temp tmp
INNER JOIN tblclientes cli ON cli.idproduto = tmp.id
-- delete
DELETE #temp WHERE id = 2035
-- update
UPDATE #temp set cargo = 'Diretor' WHERE id = 2035
Trabalhando com Cursores em MS-SQL Server.
Autor : Antonio Carlos Ferreira de Azevedo Postado em : 21/08/2018
Quando estamos trabalhando com STORED PROCEDURES, muitas vezes temos a necessidade de fazer uma leitura e
processar seus registros lendo linha a linha até o final da tabela. Vamos lá entender como podemos fazer esta operação
em MS-Sql.
Para evitar erros quando estamos trabalhando com diversos cursores podemos executar a seguinte função para verificar
se o cursor esta aberto e se sim executar o procedimento para fechar (CLOSE) e liberar a memoria (DEALLOCATE),
conforme o exemplo abaixo:
IF (CURSOR_STATUS('global','curr')>=-1)
BEGIN
CLOSE curr
DEALLOCATE curr
END
O próximo passo é declarar nosso cursor
DECLARE curr
CURSOR FOR
Agora vamos carregar os dados e abrir nosso cursor, abaixo temos o exemplo de um SELECT, declarando as variaveis e
carregando os dados no cursor com o comando FETCH:
-- Select
SELECT id, nome, idgrupo FROM tblclientes c WHERE c.idgrupo > 0
-- Abrindo o Cursor
OPEN curr
-- Movimenta o ponteiro dos dados para o próximo registro e carrega as variáveis
FETCH NEXT FROM curr INTO @id, @nome, @idgrupo
END
Após finalizarmos nosso LOOP de leitura e tratamento dos dados fechamos nosso cursor e liberamos a memoria:
CLOSE curr
DEALLOCATE curr
DECLARE curr
CURSOR FOR
-- Select
SELECT id, nome, idgrupo FROM tblclientes c
WHERE c.idgrupo > 0
-- Abrindo o Cursor
OPEN curr
-- While
WHILE @@FETCH_STATUS = 0
BEGIN
-- faça o tratamento dos dados aqui....
UPDATE tblclientes SET soma = soma + 1 WHERE id = @id
-- Movimenta o ponteiro dos dados para o próximo registro e carrega as variáveis
FETCH NEXT FROM curr INTO @id, @nome, @idgrupo
END
AS
GO
Em nosso exemplo a procedure chama GetOrders, recebe como
parâmetro o orderid, que tem como valor default 0, e o retorno da
execução são as colunas orderid, orderdate, da tabela
Sales.Orders onde a coluna orderid tem o valor igual ao
parâmetro passado. Entenda que o valor do @orderid será
substituído pelo valor do parâmetro de entrada.
@ é um símbolo usado na frente do nome das variáveis e
parâmetros.
E como executar uma stored procedure? Simples, comando
EXECUTE
Execute GetOrders 23
Conclusão