Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Procedimentos armazenados estendidos, empacotados como bibliotecas de vínculo dinâmico (DLLs), fornecem uma maneira de estender a funcionalidade do SQL Server por meio de funções desenvolvidas com o Visual C++. Os procedimentos armazenados estendidos são implementados como funções dentro de DLLs. Além das funções, os procedimentos armazenados estendidos também podem definir tipos definidos pelo usuário e funções agregadas (como SOMA ou AVG).
Quando um cliente executa um procedimento armazenado estendido, o SQL Server procura a DLL associada ao procedimento armazenado estendido e carrega a DLL. O SQL Server chama o procedimento armazenado estendido solicitado e o executa em um contexto de segurança especificado. Em seguida, o procedimento armazenado estendido passa os conjuntos de resultados e retorna os parâmetros de volta ao servidor.
O SQL Server fornece extensões para Transact-SQL (T-SQL) para permitir que você instale assemblies verificáveis no SQL Server. O conjunto de permissões do SQL Server especifica o contexto de segurança, com os seguintes níveis de segurança:
Modo irrestrito: Execute o código por sua própria conta e risco; o código não precisa ser comprovadamente seguro em termos de tipo.
Modo de segurança: Executar código seguro de digitação verificável; compilado com /clr:safe.
Importante
Visual Studio 2015 obsoleto e o Visual Studio 2017 não suporta as opções /clr:pure e /clr:safe na criação de projetos verificáveis. Se você precisar de um código verificável, recomendamos que traduza seu código para C#.
Para criar e carregar um assembly verificável no SQL Server, use os comandos Transact-SQL CREATE ASSEMBLY e DROP ASSEMBLY da seguinte maneira:
CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>
O comando PERMISSION_SET especifica o contexto de segurança e pode ter os valores UNRESTRICTED, SAFE ou EXTENDED.
Além disso, você pode usar o comando CREATE FUNCTION para vincular a nomes de método em uma classe:
CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]
Exemplo
O seguinte script SQL (por exemplo, chamado "MyScript.sql") carrega um assembly no SQL Server e disponibiliza um método de uma classe:
-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from
'c:\stockNoEA.dll'
with permission_set safe
-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go
-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go
Os scripts SQL podem ser executados interativamente no SQL Query Analyzer ou na linha de comando com o utilitário sqlcmd.exe. A seguinte linha de comando conecta-se ao MyServer, utiliza a base de dados padrão, usa uma ligação confiável, executa o MyScript.sql e produz MyResult.txt.
sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt