Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como criar um procedimento armazenado vinculado ao esquema no SQL Server


Se você já criou uma UDF vinculada a esquema, saberá que a vinculação de esquema é apenas uma questão de adicionar WITH SCHEMABINDING à sua definição. O mesmo se aplica quando você cria uma exibição vinculada ao esquema.

Os procedimentos armazenados são um pouco diferentes.

Somente procedimentos armazenados compilados nativamente podem ser vinculados ao esquema. Na verdade, procedimentos armazenados compilados nativamente devem ser vinculado ao esquema. Você não pode criar um procedimento armazenado compilado nativamente sem vinculá-lo ao esquema.

Mas se você tentar vincular o esquema a um procedimento regular (não compilado nativamente), receberá um erro.


Exemplo de um procedimento armazenado vinculado ao esquema


Aqui está um exemplo de criação de um procedimento armazenado vinculado ao esquema (compilado nativamente).
CRIAR PROCEDIMENTO dbo.usp_GetCowsByName @cowname varchar(70)COM SCHEMABINDING, NATIVE_COMPILATIONASBEGIN ATÔMICO COM (NÍVEL DE ISOLAMENTO DE TRANSAÇÃO =INSTANTÂNEO, LANGUAGE =N'us_english') SELECT CowId, CowName, PhoneFROM dbo.CowsWHERE CowName =@cownameEND;GO 
Incluí o WITH SCHEMABINDING argumento, mas também incluí NATIVE_COMPILATION , que indica que o procedimento é compilado nativamente.

Observe também o ATOMIC WITH quadra. Isso é necessário para procedimentos armazenados compilados nativamente.

Esse código criou um procedimento armazenado vinculado ao esquema.

Erro? Verifique estes pré-requisitos


Os procedimentos armazenados compilados nativamente exigem que todas as tabelas subjacentes sejam tabelas com otimização de memória.

Para criar tabelas com otimização de memória, você deve primeiro criar um grupo de arquivos com otimização de memória.

Aqui está o código que usei para criar o grupo de arquivos com otimização de memória, seu arquivo associado e a tabela com otimização de memória que faço referência no procedimento armazenado:
Teste ALTER DATABASE ADD FILEGROUP imoltp_test CONTAINS MEMORY_OPTIMIZED_DATA;Teste GOALTER DATABASE ADD FILE (name='imoltp_test1', filename='/var/opt/mssql/data/imoltp_test1.mdf') TO FILEGROUP imolp_test;GOCREATE TABLE [dbo] .[Cows]( [CowId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY NÃO CLUSTERED, [CowName] [varchar](70) NULL, [Phone] [varchar](10) NULL) WITH (MEMORY_OPTIMIZED =ON , DURABILITY =SCHEMA_AND_DATA)GO

Portanto, se você quiser copiar e colar meu código, precisará executar isso primeiro e depois o código do procedimento armazenado acima.

Observe também que estou usando o SQL Server para Linux e, portanto, os caminhos dos arquivos usam convenções do Linux. Se você estiver criando um arquivo de banco de dados no Windows, precisará alterá-lo para usar a convenção de caminho de arquivo do Windows (e certifique-se de usar um caminho de arquivo que exista em seu sistema).