Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os procedimentos armazenados compilados nativamente não implementam totalmente a área de superfície de programação e consulta do Transact-SQL. Há certas construções Transact-SQL que não podem ser usadas dentro de procedimentos armazenados compilados nativamente. Para obter mais informações, consulte Estruturas com suporte em procedimentos armazenados compilados nativamente.
No entanto, há vários recursos de Transact-SQL que só têm suporte para procedimentos armazenados compilados nativamente:
Blocos atômicos. Para obter mais informações, consulte Atomic Blocks.
NOT NULLrestrições em parâmetros e variáveis em procedimentos armazenados compilados nativamente. Você não pode atribuirNULLvalores a parâmetros ou variáveis declaradas comoNOT NULL. Para obter mais informações, consulte DECLARE @local_variable (Transact-SQL).Vinculação de esquema de procedimentos armazenados compilados nativamente.
Procedimentos armazenados compilados nativamente são criados usando CREATE PROCEDURE (Transact-SQL). O exemplo a seguir mostra uma tabela com otimização de memória e um procedimento armazenado compilado nativamente usado para inserir linhas na tabela.
create table dbo.Ord
(OrdNo integer not null primary key nonclustered,
OrdDate datetime not null,
CustCode nvarchar(5) not null)
with (memory_optimized=on)
go
create procedure dbo.OrderInsert(@OrdNo integer, @CustCode nvarchar(5))
with native_compilation, schemabinding, execute as owner
as
begin atomic with
(transaction isolation level = snapshot,
language = N'English')
declare @OrdDate datetime = getdate();
insert into dbo.Ord (OrdNo, CustCode, OrdDate) values (@OrdNo, @CustCode, @OrdDate);
end
go
No exemplo de código, NATIVE_COMPILATION indica que esse procedimento armazenado Transact-SQL é um procedimento armazenado compilado nativamente. As seguintes opções são necessárias:
| Opção | Descrição |
|---|---|
SCHEMABINDING |
Os procedimentos armazenados compilados nativamente devem ser associados ao esquema dos objetos que ele faz referência. Isso significa que, pelo procedimento, as tabelas referenciadas não podem ser descartadas. As tabelas referenciadas no procedimento devem incluir seu nome de esquema e curingas (*) não são permitidos em consultas.
SCHEMABINDING só há suporte para procedimentos armazenados compilados nativamente nesta versão do SQL Server. |
EXECUTE AS |
Não há suporte EXECUTE AS CALLERpara procedimentos armazenados compilados nativamente, que é o contexto de execução padrão. Portanto, é necessário especificar o contexto de execução. As opções EXECUTE AS OWNER, EXECUTE ASo usuário e EXECUTE AS SELF têm suporte. |
BEGIN ATOMIC |
O corpo de um procedimento armazenado compilado nativamente deve consistir exatamente em um bloco atômico. Os blocos atômicos garantem a execução atômica do procedimento armazenado. Se o procedimento for invocado fora do contexto de uma transação ativa, ele iniciará uma nova transação, que será confirmada no final do bloco atômico. Os blocos atômicos em procedimentos armazenados compilados nativamente têm duas opções obrigatórias.TRANSACTION ISOLATION LEVEL. Consulte Níveis de Isolamento de Transação para os níveis de isolamento suportados.LANGUAGE. O idioma do procedimento armazenado deve ser definido como um dos idiomas ou aliases de idioma disponíveis. |
EXECUTE AS Em relação aos logons do Windows, pode ocorrer um erro devido à representação feita por meio de EXECUTE AS. Se uma conta de usuário usa a Autenticação do Windows, deve haver total confiança entre a conta de serviço usada para a instância do SQL Server e o domínio do logon do Windows. Se não houver confiança total, a seguinte mensagem de erro será retornada ao criar um procedimento armazenado compilado nativamente: Msg 15404, Não foi possível obter informações sobre o grupo/nome de usuário do Windows NT, 0x5 código de erro.
Para resolver esse erro, use um dos seguintes:
Use uma conta do mesmo domínio que o usuário do Windows para o serviço SQL Server.
Se o SQL Server estiver usando uma conta de computador, como Serviço de Rede ou Sistema Local, o computador deverá ser confiável pelo domínio que contém o usuário do Windows.
Use a Autenticação do SQL Server.
Você também pode ver o erro 15517 ao criar um procedimento armazenado compilado nativamente. Para obter mais informações, consulte MSSQLSERVER_15517.
Atualizando um procedimento armazenado compilado nativamente
Não há suporte para a execução de operações de alteração em procedimentos armazenados compilados nativamente. Uma maneira de modificar um procedimento armazenado compilado nativamente é remover e recriar o procedimento armazenado:
Gere um script para as permissões do procedimento armazenado.
Opcional, gere script para o procedimento armazenado e salve como backup.
Exclua o procedimento armazenado.
Crie o procedimento armazenado alterado.
Reaplique as permissões automatizadas ao procedimento armazenado.
A desvantagem desse procedimento é que o aplicativo ficará offline desde o início da etapa 3 até a conclusão da etapa 5. Isso pode levar alguns segundos e o cliente que usa o aplicativo pode ver mensagens de erro.
Outra maneira de modificar (efetivamente) um procedimento armazenado compilado nativamente é primeiro criar uma nova versão do procedimento armazenado. Aqui, o procedimento armazenado compilado nativamente tem um número de versão associado. Chamaremos a versão antiga SP_Vold e a nova versão SP_Vnew.
Gere script para as permissões no SP_Vold.
Crie SP_Vnew.
Aplique as permissões de SP_Vold a SP_Vnew.
Atualize as referências de SP_Vold para apontarem para SP_Vnew. Isso pode ser feito de maneiras diferentes, por exemplo:
Use um procedimento armazenado wrapper (baseado em disco) e altere esse procedimento para apontar para SP_Vnew. A desvantagem dessa abordagem é o impacto no desempenho do indireto.
ALTER PROCEDURE dbo.SP p1,...,pn AS EXEC dbo.SP_Vnew p1,...,pn GOOpcional, remova SP_Vold.
A vantagem dessa abordagem é que o aplicativo não fica offline. No entanto, é necessário mais trabalho para manter as referências e garantir que elas sempre apontem para a versão mais recente do procedimento armazenado.