Respostas:
Os procedimentos armazenados são um lote de instruções SQL que podem ser executadas de várias maneiras. A maioria dos DBMs principais suporta procedimentos armazenados; no entanto, nem todos fazem. Você precisará verificar com a documentação de ajuda do DBMS específica para detalhes. Como eu estou mais familiarizado com o SQL Server, usarei isso como meus exemplos.
Para criar um procedimento armazenado, a sintaxe é bastante simples:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
Então, por exemplo:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
Um benefício dos procedimentos armazenados é que você pode centralizar a lógica de acesso a dados em um único local, facilitando a otimização dos DBAs. Os procedimentos armazenados também têm um benefício de segurança, pois você pode conceder direitos de execução a um procedimento armazenado, mas o usuário não precisará ter permissões de leitura / gravação nas tabelas subjacentes. Este é um bom primeiro passo contra a injeção de SQL.
Os procedimentos armazenados vêm com desvantagens, basicamente a manutenção associada à sua operação básica de CRUD . Digamos que para cada tabela você tenha uma inserção, atualização, exclusão e pelo menos uma seleção com base na chave primária, isso significa que cada tabela terá 4 procedimentos. Agora pegue um banco de dados de tamanho decente de 400 tabelas e você terá 1600 procedimentos! E isso assumindo que você não possui duplicatas, o que provavelmente terá.
É aqui que o uso de um ORM ou outro método para gerar automaticamente suas operações básicas de CRUD tem muito mérito.
Um procedimento armazenado é um conjunto de instruções SQL pré-compiladas usadas para executar uma tarefa especial.
Exemplo: se eu tiver uma Employee
tabela
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
Primeiro, estou recuperando a Employee
tabela:
Create Procedure Employee details
As
Begin
Select * from Employee
End
Para executar o procedimento no SQL Server:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
Em segundo lugar, estou inserindo o valor na tabela Employee
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
Para executar o procedimento parametrizado no SQL Server:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
Exemplo: @Name Varchar(30)
Na Employee
tabela, o Name
tamanho da coluna deve ser varchar(30)
.
Um procedimento armazenado é um grupo de instruções SQL que foram criadas e armazenadas no banco de dados. Um procedimento armazenado aceita parâmetros de entrada para que um único procedimento possa ser usado na rede por vários clientes usando dados de entrada diferentes. Os procedimentos armazenados reduzirão o tráfego da rede e aumentarão o desempenho. Se modificarmos um procedimento armazenado, todos os clientes receberão o procedimento armazenado atualizado.
Exemplo de criação de um procedimento armazenado
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
Vantagens de usar procedimentos armazenados
Um procedimento armazenado permite programação modular.
Você pode criar o procedimento uma vez, armazená-lo no banco de dados e chamá-lo várias vezes no seu programa.
Um procedimento armazenado permite uma execução mais rápida.
Se a operação exigir uma grande quantidade de código SQL que é executado repetidamente, os procedimentos armazenados podem ser mais rápidos. Eles são analisados e otimizados quando são executados pela primeira vez, e uma versão compilada do procedimento armazenado permanece em um cache de memória para uso posterior. Isso significa que o procedimento armazenado não precisa ser reparado e re-otimizado a cada uso, resultando em tempos de execução muito mais rápidos.
Um procedimento armazenado pode reduzir o tráfego de rede.
Uma operação que requer centenas de linhas do código Transact-SQL pode ser executada por meio de uma única instrução que executa o código em um procedimento, em vez de enviar centenas de linhas de código pela rede.
Procedimentos armazenados fornecem melhor segurança aos seus dados
Os usuários podem receber permissão para executar um procedimento armazenado, mesmo que não tenham permissão para executar as instruções do procedimento diretamente.
No SQL Server, temos diferentes tipos de procedimentos armazenados:
Os procedimentos armazenados no sistema são armazenados no banco de dados mestre e começam com um sp_
prefixo. Esses procedimentos podem ser usados para executar uma variedade de tarefas para oferecer suporte às funções do SQL Server para chamadas de aplicativos externos nas tabelas do sistema
Exemplo: sp_helptext [StoredProcedure_Name]
Os procedimentos armazenados definidos pelo usuário geralmente são armazenados em um banco de dados do usuário e geralmente são projetados para concluir as tarefas no banco de dados do usuário. Embora a codificação desses procedimentos não use o sp_
prefixo, porque se usarmos o sp_
prefixo primeiro, ele verificará o banco de dados mestre e, em seguida, o banco de dados definido pelo usuário.
Procedimentos armazenados estendidos são os procedimentos que chamam funções de arquivos DLL. Atualmente, os procedimentos armazenados estendidos são descontinuados pelo motivo que seria melhor evitar o uso de procedimentos armazenados estendidos.
Geralmente, um procedimento armazenado é uma "Função SQL". Eles têm:
-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID
Este é um exemplo focado em T-SQL. Os procedimentos armazenados podem executar a maioria das instruções SQL, retornar valores escalares e baseados em tabelas e são considerados mais seguros porque evitam ataques de injeção SQL.
Pense em uma situação como essa,
NOTA:
Um procedimento armazenado é usado principalmente para executar determinadas tarefas em um banco de dados. Por exemplo
Um procedimento armazenado nada mais é do que um grupo de instruções SQL compiladas em um único plano de execução.
Exemplo: Criando um Procedimento Armazenado
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
Altere ou modifique um procedimento armazenado:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
Solte ou exclua um procedimento armazenado:
DROP PROCEDURE GetEmployee
Um procedimento armazenado é um conjunto pré-compilado de uma ou mais instruções SQL que executam alguma tarefa específica.
Um procedimento armazenado deve ser executado sozinho, usando EXEC
Um procedimento armazenado pode retornar vários parâmetros
Um procedimento armazenado pode ser usado para implementar transações
"O que é um procedimento armazenado" já foi respondido em outras postagens aqui. O que vou postar é uma maneira menos conhecida de usar o procedimento armazenado. É grouping stored procedures
ou numbering stored procedures
.
Referência de sintaxe
; number
de acordo com isso
Um número inteiro opcional usado para agrupar procedimentos com o mesmo nome. Esses procedimentos agrupados podem ser descartados usando uma instrução DROP PROCEDURE
Exemplo
CREATE Procedure FirstTest
(
@InputA INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO
CREATE Procedure FirstTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Usar
exec FirstTest 10
exec FirstTest;2 20,30
Resultado
Outra tentativa
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Resultado
Msg 2730, Nível 11, Estado 1, Procedimento SecondTest, Linha 1 [Linha 3 de Lote Inicial] Não é possível criar o procedimento 'SecondTest' com um número de grupo 2 porque atualmente não existe um procedimento com o mesmo nome e um número de grupo 1 em o banco de dados. Deve executar CREATE PROCEDURE 'SecondTest'; 1 primeiro.
Referências :
CUIDADO
Um procedimento armazenado é uma coleção nomeada de instruções SQL e lógica processual, ou seja, compilada, verificada e armazenada no banco de dados do servidor. Um procedimento armazenado é normalmente tratado como outros objetos de banco de dados e controlado pelo mecanismo de segurança do servidor.
Em um DBMS, um procedimento armazenado é um conjunto de instruções SQL com um nome atribuído armazenado no banco de dados na forma compilada, para que possa ser compartilhado por vários programas.
O uso de um procedimento armazenado pode ser útil para
Fornecer um acesso controlado aos dados (os usuários finais podem apenas inserir ou alterar dados, mas não podem escrever procedimentos)
Garantir a integridade dos dados (os dados seriam inseridos de maneira consistente) e
Melhora a produtividade (as instruções de um procedimento armazenado precisam ser gravadas apenas uma vez)
para simples,
Procedimento armazenado são programas armazenados , Um programa / função armazenado no banco de dados.
Cada programa armazenado contém um corpo que consiste em uma instrução SQL. Essa declaração pode ser uma declaração composta composta por várias declarações separadas por caracteres de ponto e vírgula (;).
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
Os procedimentos armazenados no SQL Server podem aceitar parâmetros de entrada e retornar vários valores dos parâmetros de saída; no SQL Server, instruções de programa de procedimentos armazenados para executar operações no banco de dados e retornar um valor de status a um procedimento ou lote de chamada.
Os benefícios do uso de procedimentos armazenados no SQL Server
Eles permitem programação modular. Eles permitem uma execução mais rápida. Eles podem reduzir o tráfego de rede. Eles podem ser usados como um mecanismo de segurança.
Aqui está um exemplo de um procedimento armazenado que aceita um parâmetro, executa uma consulta e retorna um resultado. Especificamente, o procedimento armazenado aceita o BusinessEntityID como um parâmetro e o usa para corresponder à chave primária da tabela HumanResources.Employee para retornar o funcionário solicitado.
> create procedure HumanResources.uspFindEmployee `*<<<---Store procedure name`*
@businessEntityID `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId, <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId <<<---parameter used as criteria
end
Aprendi isso com essential.com ... é muito útil.
As instruções Em procedimentos armazenados são gravadas apenas uma vez e reduzem o tráfego de rede entre clientes e servidores. Também podemos evitar ataques de injeção de sql.
ORM
gostaEntity Framework
de fazerCRUD
operações?